LeetCode 题解(142): Reorder List
来源:互联网 发布:网络口语培训哪家好 编辑:程序博客网 时间:2024/04/29 15:50
题目:
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,4}
, reorder it to {1,4,2,3}
.
做完In-place的sort list,这题就变得非常easy了。先找到中点,如1->2->3->4->5->6中的3,或1->2->3->4->5中的3,将中点之后的链表reverse,可用循环reverse或递归reverse,上一题已给出解法。之后就是sort list中merge的简化版了。
C++版:
/** * 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) return; int len = 0; ListNode* p = head; while(p != NULL) { p = p->next; len++; } int i = 0; p = head; ListNode* q = p; while(i < (len - 1) / 2) { q = q->next; i++; } q->next = reverseTail(q->next); ListNode* temp = q->next; q->next = NULL; q = temp; while(q != NULL) { temp = p->next; p->next = q; p = temp; temp = q->next; q->next = p; q = temp; } } ListNode* reverseTail(ListNode* head) { if(head == NULL || head->next == NULL) return head; ListNode* newHead = reverseTail(head->next); head->next->next = head; head->next = NULL; return newHead; }};
Java版:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public void reorderList(ListNode head) { if(head == null) return; ListNode p = head; int len = 0; while(p != null) { p = p.next; len++; } p = head; ListNode q = p; int i = 0; while(i < (len - 1) / 2) { q = q.next; i++; } q.next = reverseList(q.next); ListNode temp = q.next; q.next = null; q = temp; while(q != null) { temp = p.next; p.next = q; p = temp; temp = q.next; q.next = p; q = temp; } } public ListNode reverseList(ListNode head) { if(head == null) return null; ListNode pre = head; ListNode cur = pre.next; while(cur != null) { pre.next = cur.next; cur.next = head; head = cur; cur = pre.next; } return head; }}
Python版:
# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: # @param {ListNode} head # @return {void} Do not return anything, modify head in-place instead. def reorderList(self, head): if head == None: return length, p = 0, head while p != None: p = p.next length += 1 p, q, i = head, head, 0 while i < (length - 1) / 2: q = q.next i += 1 q.next = self.reverseList(q.next) temp = q.next q.next = None q = temp while q != None: temp = p.next p.next = q p = temp temp = q.next q.next = p q = temp def reverseList(self, head): if head == None: return None pre, cur = head, head.next while cur != None: pre.next = cur.next cur.next = head head = cur cur = pre.next return head
0 0
- LeetCode 题解(142): Reorder List
- LeetCode题解:Reorder List
- Reorder List|leetcode题解
- leetcode题解-143. Reorder List
- leetcode题解-143. Reorder List
- LeetCode题解——Reorder List
- LeetCode题解–143. Reorder List
- LeetCode(143) Reorder List
- [leetcode][list] Reorder List
- [leetcode][list] Reorder List
- leetcode系列(71)Reorder List
- leetcode reorder-list(java实现)
- Leetcode: Reorder List
- [LeetCode] Reorder List
- Leetcode: Reorder List
- LeetCode:Reorder List
- leetcode之Reorder List
- Leetcode: Reorder List
- DOM元素尺寸offsetWidth,scrollWidth,clientWidth等详解
- struts2学习笔记
- 多线程编程
- 分享 ASP.Net 网站设置 404错误跳转到指定页面的三种方法
- 算法导论(CLRS)答案
- LeetCode 题解(142): Reorder List
- Java:String类的常用方法
- Sequence Generator分析
- 5.数据库管理(1)
- [leetcode][math] Sqrt(x)
- Java Jersey2使用总结
- Java 递归解决 "汉诺塔" 问题
- Java:Math类中的常用方法
- 让RelativeLayout,LinearLayout整个布局实现响应点击事件