Reorder List
来源:互联网 发布:随身淘宝皇家小地主 编辑:程序博客网 时间:2024/06/06 12:57
Given a singly linked list L: L0 → L1 → … → Ln-1 → Ln
reorder it to: L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …
链表的题目非常容易出错,要仔细些。尤其要清楚其中的指针是怎么变化的
java
/** * 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: nothing */ public void reorderList(ListNode head) { // write your code here if (head == null || head.next == null) { return; } ListNode slow = head; ListNode fast = head.next; ListNode mid = null; while (fast != null && fast.next != null) { slow = slow.next; fast = fast.next.next; } mid = slow; ListNode tail = reverse(mid.next); mid.next = null; merge(head, tail); } private ListNode reverse(ListNode head) { if (head == null) { return null; } ListNode curr = head; ListNode prev = null; while (curr != null) { ListNode temp = curr.next; curr.next = prev; prev = curr; curr = temp; } return prev; } private void merge(ListNode head, ListNode tail) { if (head == null || tail == null) { return; } int index = 0; ListNode dummy = new ListNode(0); while (head != null && tail != null) { dummy.next = head; head = head.next; dummy = dummy.next; dummy.next = tail; tail = tail.next; dummy = dummy.next; } if (head != null) { dummy.next = head; } else { dummy.next = tail; } }}
python
"""Definition of ListNodeclass ListNode(object): def __init__(self, val, next=None): self.val = val self.next = next"""class Solution: """ @param: head: The head of linked list. @return: nothing """ def reorderList(self, head): # write your code here if head is None or head.next is None: return mid = self.findMid(head) tail = self.reverse(mid.next) mid.next = None self.merge(head, tail) def findMid(self, head): slow = head fast = head.next while fast is not None and fast.next is not None: slow = slow.next fast = fast.next.next return slow def reverse(self, head): if head is None: return head curr = head prev = None while curr is not None: temp = curr.next curr.next = prev prev = curr curr = temp return prev def merge(self, head, tail): if head is None or tail is None: return flag = True dummy = ListNode(-1) while head is not None and tail is not None: if flag: dummy.next = head head = head.next else: dummy.next = tail tail = tail.next flag = not flag dummy = dummy.next if head is not None: dummy.next = head else: dummy.next = 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
- java 静态内部类和费静态内部类的区别
- 常用快捷键
- Lombok
- mysql服务器安装
- Docker Registry 私有镜像仓库批量清理镜像
- Reorder List
- 链表面试题(二)
- Nginx的安装与部署
- 逻辑回归详解
- 高斯日记
- 掌握这些常见的操作git就基本可以平趟了
- Mybatis配置过程——增删改查实例
- 选项卡,数组,年历
- 杭电1108 最小公倍数