leetcode Reorder List

来源:互联网 发布:相册模板制作软件 编辑:程序博客网 时间:2024/05/16 06:51

Reorder List

 Total Accepted: 2069 Total Submissions: 11880My Submissions

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:  ListNode* reverse(ListNode* head) {    ListNode* prev = NULL, *cur = head, *next = NULL;    while (cur != NULL) {      next = cur->next;      cur->next = prev;      prev = cur;      cur = next;    }    return prev;  }  void reorderList(ListNode *head) {    if (head == NULL || head->next == NULL || head->next->next == NULL)      return;    ListNode *slow = head, *fast = head;    while (fast != NULL && fast->next != NULL && fast->next->next != NULL) {      slow = slow->next;      fast = fast->next->next;    }    ListNode *l2 = reverse(slow->next), *l1 = head, *l1next = NULL, *l2next = NULL;    slow->next = NULL;    while (l2 != NULL) {      l1next = l1->next;      l1->next = l2;      l2next = l2->next;      l2->next = l1next;      l1 = l1next;      l2 = l2next;    }  }  };


Reverse the second half string. 








	
				
		
原创粉丝点击