leetcode. Reorder List
2014-12-06 10:42
344 查看
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
You must do this in-place without altering the nodes' values.
For example,
Given
1、通过双指针法得到链表中点,从而得到左右两个链表
2、将链表右半边逆序
3、合并两个链表
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-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}.
1、通过双指针法得到链表中点,从而得到左右两个链表
2、将链表右半边逆序
3、合并两个链表
void reorderList(ListNode *head) { if (head == NULL || head->next == NULL || head->next->next == NULL) return; ListNode *p, *q, *dummy = new ListNode(INT_MIN); q = head; p = q->next; while (p != NULL) { q = q->next; p = p->next; if (p != NULL) p = p->next; } dummy->next = q->next; // right half nodes q->next = NULL; q = head; // left half nodes reverse(dummy); while (q != NULL) { p = dummy->next; dummy->next = p->next; p->next = q->next; q->next = p; q = q->next; q = q->next; if (dummy->next == NULL) break; } delete dummy; } void reverse(ListNode *dummy) { ListNode *p = dummy, *q, *r; q = p->next; if (q == NULL) return; r = q->next; while (r != NULL) { q->next = p; p = q; q = r; r = r->next; } q->next = p; dummy->next->next = NULL; dummy->next = q; }
相关文章推荐
- leetcode - Reorder List
- [LeetCode] Reorder List
- [LeetCode] Reorder List
- LeetCode题解–143. Reorder List
- Leetcode: Reorder List
- leetcode -- Reorder List
- leetcode 【 Reorder List 】python 实现
- LeetCode Reorder List
- 【leetcode】【单链表】【143】Reorder List
- leetcode:Reorder List (修改链表排列不改变值) 【面试算法题】
- [LeetCode] Reorder List
- LeetCode Reorder List
- leetcode 日经贴,Cpp code -Reorder List
- Reorder List 链表首尾交叉排列@LeetCode
- 【LeetCode】Reorder List
- LeetCode(143) Reorder List
- leetcode || 143、Reorder List
- leetcode reorder-list(java实现)
- leetcode--Reorder List
- Reorder List - Leetcode