Reorder List ---LeetCode
来源:互联网 发布:淘宝店铺第三方 编辑:程序博客网 时间:2024/06/11 18:17
https://leetcode.com/problems/reorder-list/
解题思路:
首先题目要求了要 in-place。表明我们不能创建一个新的链表,而只能通过改变指针的指向来重新排序。
一共分为三个步骤解决:
- 使用 slow 和 fast 指针找到链表中点,将链表分为两半。
- 将后半段链表反转。
- 最后将两段链表归并即可。
示意图:
/** * 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 || head.next == null) return; ListNode slow = head; ListNode fast = head; while (fast.next != null && fast.next.next != null) { slow = slow.next; fast = fast.next.next; } ListNode head1 = head; ListNode head2 = slow.next; slow.next = null; head2 = reverse(head2); head = merge(head1, head2); } public ListNode reverse (ListNode head) { ListNode prev = head; ListNode curr = head.next; head.next = null; while (curr != null) { ListNode next = curr.next; curr.next = prev; prev = curr; curr = next; } return prev; } public ListNode merge (ListNode l1, ListNode l2) { while (l2 != null) { ListNode t1 = l1.next; ListNode t2 = l2.next; l1.next = l2; l2.next = t1; l1 = t1; l2 = t2; } return l1; }}
0 0
- [leetcode][list] Reorder List
- [leetcode][list] Reorder List
- Leetcode: Reorder List
- [LeetCode] Reorder List
- LeetCode题解:Reorder List
- Leetcode: Reorder List
- LeetCode:Reorder List
- leetcode之Reorder List
- Leetcode: Reorder List
- [LeetCode]Reorder List
- [LeetCode] Reorder List
- leetcode Reorder List
- LeetCode | Reorder List
- LeetCode Reorder List
- LeetCode 之 Reorder List
- Leetcode: Reorder List
- LeetCode OJ:Reorder List
- Reorder List (LeetCode)
- DoTween
- A hard puzzle
- ROS图像相关包
- 约翰·卡马克和他的id Software
- 编译器设计:整型立即数支持
- Reorder List ---LeetCode
- php取周的第一天和最后一天
- C语言双重置换加密
- java 初探(五)
- ECSHOP网站程序可以绕过权限上传一句话木马
- 11章上机
- Android 接入微信支付宝支付
- C语言一次一密
- DHCP Emulator