本文主要是介绍143. 重排链表——寻找链表中点 + 链表逆序 + 合并链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
class Solution {
public:void reorderList(ListNode* head) {if(!head || !head -> next || ! head -> next -> next) //长度小于2都不用处理return;ListNode *slow = head, *fast = head, *sec;while(fast && fast -> next){ //快慢指针找到中间的节点slow = slow -> next;fast = fast -> next -> next;}fast = slow -> next; //fast标记为下一段slow -> next = nullptr; //截断reverseList(fast); //第二段反序combineList(head, fast); //合并}void reverseList(ListNode*& head){ListNode *left = head, *mid = head -> next, *right;while(mid){right = mid -> next; //right向右移动left -> next = right; //left指向下一个点mid -> next = head; //mid向左指head = mid; //head记录头节点,也就是每一次中较右的节点mid = right; //mid向右移动}}void combineList(ListNode*& fir, ListNode*& sec){while(sec){ //默认fir长1个单位 或 长度相等ListNode *temp = sec;sec = sec -> next;//插入节点temp -> next = fir -> next;fir -> next = temp;fir = temp -> next;}}
};
Accepted
12/12 cases passed (28 ms)
Your runtime beats 96.76 % of cpp submissions
Your memory usage beats 69.4 % of cpp submissions (17.3 MB)
这篇关于143. 重排链表——寻找链表中点 + 链表逆序 + 合并链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!