题目重述
待更
思路分析
关键点一:链表翻转
2019/09/10
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverse(ListNode* head){ //翻转
ListNode* cur = head;
ListNode* temp = head; //作为暂时寄存
ListNode* result = NULL;
while(cur){
temp = cur->next;
cur->next = result;
result = cur;
cur = temp;
}
return result;
}
void reorderList(ListNode* head) {
if(head == NULL || head->next == NULL) return;
//找中间节点
ListNode* slow = head;
ListNode* fast = head;
while(fast->next && fast->next->next){ //快慢指针
fast = fast->next->next;
slow = slow->next;
}
//分离前后链表
ListNode* needReverser = slow->next;
slow->next = NULL;
//后半段翻转
needReverser = reverse(needReverser);
//间隔插入
ListNode* cur = head;
while(cur && needReverser){
ListNode* curSecond = needReverser;
needReverser = needReverser->next;
ListNode* nextCur = cur->next;
curSecond->next = cur->next;
cur->next = curSecond;
cur = nextCur;
}
} //reorderList
}; //Solution
收录原因:代码有借鉴意义.