Reverse Linked List II
来源:互联网 发布:印尼排华 知乎 中国 编辑:程序博客网 时间:2024/05/17 21:59
题目地址:https://leetcode.com/problems/reverse-linked-list-ii/description/
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given 1->2->3->4->5->NULL, m = 2 and n = 4,
return 1->4->3->2->5->NULL.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
就三步:截取,旋转,拼接:
public class ReverseLinkedListII { public static ListNode reverseBetween(ListNode head, int m, int n) { if (head == null) return head; if (m == n) return head; ListNode p = head; ListNode q = head; for (int i = 1; i < n; i++) q = q.next; // Get the tail of the list ListNode k = null; if (q != null) k = q.next; // cut the tail of the list q.next = null; if (m == 1) { head = reverseWholeLinkedList(p); ListNode t = head; while (t.next != null) { t = t.next; } t.next = k; } else { for (int i = 1; i < m - 1; i++) { p = p.next; } ListNode t = p; p = p.next; // link the reversed list t.next = reverseWholeLinkedList(p); while (t.next != null) { t = t.next; } t.next = k; } return head; } public static ListNode reverseWholeLinkedList(ListNode list) { if (list == null) return list; if (list.next == null) return list; ListNode p = list; p = p.next; ListNode q = list; q.next = null; while (p != null) { ListNode k = p.next; p.next = q; q = p; p = k; } return q; } public static void printLinkedList(ListNode list) { if (list == null) return; ListNode node = list; while (node != null) { System.out.print(node.val + "->"); node = node.next; } System.out.println("null"); } public static void main(String[] args) { ListNode head = new ListNode(1); head.next = new ListNode(2); head.next.next = new ListNode(3); head.next.next.next = new ListNode(4); head.next.next.next.next = new ListNode(5); printLinkedList(reverseBetween(head, 1, 5)); }}
阅读全文
0 0
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- 在CmakeLists中加入c++11编译选项
- PAT 1013. 数素数 (20)
- 3
- 五角星评价demo
- ajax与servlet--验证用户名是否存在
- Reverse Linked List II
- 在Linux-manjaro下面安装搜狗中文输入法
- python进程池:multiprocessing.pool
- Samba服务的配置与应用
- 从“零”开始搭网站(二)
- java.lang.NoSuchMethodException 解决办法
- DevOps微课 | 云测试案例
- Gradle命令和配置
- VMWare 设置CentOS虚拟机固定IP地址