C\C++刷题DAY4
创始人
2024-02-05 04:44:54
0

目录

1.第一题

2.第二题

3.第三题

4.第四题

5.第五题


1.第一题

206. 反转链表 - 力扣(LeetCode)

 思路:调转指向关系,使用双指针的思想

1指向2,改成2指向1,以此类推。

参考代码:

struct ListNode* reverseList(struct ListNode* head)
{if(head==NULL)return NULL;struct ListNode *n1, *n2, *n3;n1 = NULL;n2 = head;n3 = n2->next;while(n2){n2->next = n1;n1 = n2;n2 = n3;if(n3){n3 = n3->next;}}return n1;
}

PS:

上述的这种实现的方式是用迭代的思想,那么为什么不同递归的思想取解决问题呢?

这是因为递归是有缺陷的,如果递归的深度太深的话,可能会造成栈溢出。

因此对于简单问题,能够迭代去解决的话,尽量用迭代解决

当遇见那种用迭代无法轻易解决的问题,才考虑去使用递归解决。

2.第二题

876. 链表的中间结点 - 力扣(LeetCode)

思路:

快慢指针的思想(双指针):一个指针块,一个指针慢

slow指针一次走一个节点

fast指针一次走2个节点

两种速度相差一倍,可知当fast走完的时候,slow刚好走到中间位置。

参考代码:

struct ListNode* middleNode(struct ListNode* head)
{struct ListNode *fast, *slow;fast = slow = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;}return slow;
}

3.第三题

链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com)

 思路分析:快慢指针

 fast先走k步,然后fast和slow一起走,那么当fast走完的时候,slow还没有走完,那么这个时候,两者的差就显示了倒数第k个节点。

fast走k-1步,也是同理。

参考代码:

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) 
{// write code herestruct ListNode *fast, *slow;fast = slow = pListHead;//fast先走k步while(k--){if(fast==NULL){return NULL;}fast = fast->next;}while(fast){slow = slow->next;fast = fast->next;}return slow;
}

4.第四题

链表分割_牛客题霸_牛客网 (nowcoder.com)

 

 分析:

将小于x的节点拿下来尾插成一个新的链表

将大于等于x的节点拿下来尾插成一个新的链表

最后链接这两个链表就行

PS:看到尾插就想到用哨兵位的头节点

参考代码:

class Partition {
public:ListNode* partition(ListNode* pHead, int x){// write code herestruct ListNode *lessHead, *lessTail, *greaterHead, *greaterTail;lessHead = lessTail = (struct ListNode*)malloc(sizeof(struct ListNode));greaterHead = greaterTail = (struct ListNode*)malloc(sizeof(struct ListNode));lessTail->next = greaterTail->next =NULL;struct ListNode *cur =pHead;while(cur){if(cur->val < x){lessTail->next = cur;lessTail = lessTail->next;}else{greaterTail->next = cur;greaterTail = greaterTail->next;}cur = cur->next;}lessTail->next = greaterHead->next;greaterTail->next = NULL;pHead = lessHead->next;free(lessHead);free(greaterHead);return pHead;}
};

5.第五题

链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

 分析:

回文结构:类似于古诗写法的术语,正着读和反着读是一样的

比如12321,从左到右和从右到左读是一样的。

 PS:将后半段的反转之后在和前的半段的比较。

如果相等返回true

如果不等返回flase

参考代码:

class PalindromeList
{
public://找到中间位置的节点struct ListNode *middleNode(struct ListNode* head){struct ListNode *fast, *slow;slow = fast = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;}return slow;}//反转链表struct ListNode* reverseList(struct ListNode* head){struct ListNode* cur =head;struct ListNode* rhead = NULL;while(cur){struct ListNode* next =cur->next;rhead =cur;cur = next;}return rhead;}bool chkPalindrome(ListNode* A) {// write code herestruct ListNode* mid = middleNode(A);struct ListNode* rhead = reverseList(mid);while(A && rhead){if(A->val!=rhead->val)return false;A = A->next;rhead = rhead->next;}return true;}
};

相关内容

热门资讯

【齐参与】党内法规专项答题活动 今日试题 1、根据《中国共产党章程》规定,预备党员的义务同正式党员一样。预备党员的权利,( )。 A...
涉民事诉讼,首钢朗泽推迟港股上... 7月2日,北京首钢朗泽科技股份有限公司(简称“首钢朗泽”)发布公告称,全球发售及上市计划延迟,将退回...
广东消费者起诉视频平台会员权益... 2025-07-03 18:24:40 作者:狼叫兽 近日,广东一位消费者因对某视频平台频繁调整会...
法律就是法律!N站创始人回应成... 上周Nexus Mods宣布将收紧成人内容的访问限制。主要措施是即将推行的年龄验证系统,该政策针对英...
自贡市贡井区:法官巧解十年劳务... “太感谢您了尹法官!困扰了我们专合社的问题终于解决了,这下可以安安心心谋发展了!”近日,自贡市贡井区...
菲律宾通胀数据支持进一步放松政... 高盛经济学家表示,菲律宾6月份整体通货膨胀率同比升幅从5月份的1.3%加快至1.4%,但符合该国央行...
李营营律师专题分享:《如何办理... 2025年7月3日,北京云亭(太原)律师事务所开业典礼暨“青云计划”分享会在太原隆重举行。作为云亭律...