C\C++刷题DAY4
创始人
2024-02-05 10:21:12
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;}
};

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...