Reorder List

来源:互联网 发布:天下粮仓知乎 编辑:程序博客网 时间:2024/06/03 23:07

Given a singly linked list LL0L1→…→Ln-1Ln,
reorder it to: L0LnL1Ln-1L2Ln-2→…

You must do this in-place without altering the nodes' values.

For example,

Given {1,2,3,4}, reorder it to {1,4,2,3}.

先用快慢指针找到链表的中点,然后翻转链表后半部分,再和前半部分组合。

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    void reorderList(ListNode* head) {        if (head == NULL || head->next == NULL) return;            ListNode* slow=head,*fast=head;          while(fast->next && fast->next->next)          {              slow=slow->next;              fast=fast->next->next;          }                  ListNode* list2=slow->next;        slow->next=NULL;        ListNode* list1=head;        ListNode* cur=list2,*temp=list2->next;        cur->next=NULL;        while(temp)        {            ListNode* tem=temp->next;            temp->next=cur;            cur=temp;            temp=tem;        }        list2=cur;        ListNode* Node1=list1,*node2=list2;        while(node2)        {            ListNode* tem1=Node1->next;            ListNode* tem2=node2->next;            Node1->next=node2;            node2->next=tem1;            Node1=tem1;            node2=tem2;        }                    }};


0 0
原创粉丝点击