reorder-list
来源:互联网 发布:明星和普通人长相知乎 编辑:程序博客网 时间:2024/05/25 23:29
中等 重排链表
24%
通过
给定一个单链表L: L0→L1→…→Ln-1→Ln,
重新排列后为:L0→Ln→L1→Ln-1→L2→Ln-2→…
必须在不改变节点值的情况下进行原地操作
您在真实的面试中是否遇到过这个题?Yes
样例
给出链表1->2->3->4->null,重新排列后为1->4->2->3->null。
/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val = val; * this.next = null; * } * } */ public class Solution { /** * @param head: The head of linked list. * @return: void */ private ListNode reverse(ListNode head) { ListNode newHead = null; while (head != null) { ListNode temp = head.next; head.next = newHead; newHead = head; head = temp; } return newHead; } private void merge(ListNode head1, ListNode head2) { int index = 0; ListNode dummy = new ListNode(0); while (head1 != null && head2 != null) { if (index % 2 == 0) { dummy.next = head1; head1 = head1.next; } else { dummy.next = head2; head2 = head2.next; } dummy = dummy.next; index ++; } //走到这,循环结束,要么是head1 == null,要么是head2 == null //两个链表要是不一样长,会漏一个 if (head1 != null) { /** *head2 == null,而head1还有值 */ dummy.next = head1; } else { /* head1 == null 而head2还有值 */ dummy.next = head2; } } private ListNode findMiddle(ListNode head) { ListNode slow = head, fast = head.next; while (fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; } return slow; } public void reorderList(ListNode head) { if (head == null || head.next == null) { return; } ListNode mid = findMiddle(head); ListNode tail = reverse(mid.next); mid.next = null; merge(head, tail); }}
0 0
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Android版的股票行情K线图开发
- iOS开发过程中容易忽略的关键之处
- 再认识asp.net的postback机制:探索__doPostBack的来龙去脉
- 日经春秋 20150626
- jQuery 下的 Ajax 基本知识整理
- reorder-list
- 遍历Map的四种方法
- [Android基础知识] 之二十二 UI设计之 LayoutInflater详解
- 黑马程序员--Foundation框架字符串
- NSURLSession使用说明及后台工作流程分析
- gre复习资料推荐整理
- fielddata那些事
- 设计模式----------------------观察者模式
- 山东理工大学第七届ACM校赛-字符的变化