/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *reverseList(ListNode *head) { if(head == NULL) { return head; } ListNode *tail = head; head=head->next; tail->next = NULL; while(head!=NULL) { ListNode *temp = head->next; head->next = tail; tail = head; head = temp; } return tail; } void reorderList(ListNode *head) { if(head==NULL||head->next==NULL||head->next->next==NULL) { return ; } //用快慢指针判断长度为偶数还是奇数,并找出中间元素 ListNode *slow = head; ListNode *fast = head; while(fast->next!=NULL&&fast->next->next!=NULL) { fast=fast->next->next; slow=slow->next; } ListNode *mid = slow->next; slow->next=NULL; ListNode *newHead = reverseList(mid); //通过翻转第二个矩阵获得的头结点作为新的节点 while(newHead!=NULL) { ListNode *temp = newHead->next; newHead->next = head->next; head->next = newHead; head = newHead->next; newHead = temp; } } };
关于reverse
关于最后merge链表