Reverse Linked List II
来源:互联网 发布:zank 知乎 编辑:程序博客网 时间:2024/05/18 16:37
题目:
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.
翻转链表的变形
http://blog.csdn.net/linhuanmars/article/details/24613781
这道题是比较常见的链表反转操作,不过不是反转整个链表,而是从m到n的一部分。分为两个步骤,第一步是找到m结点所在位置,第二步就是进行反转直到n结点。反转的方法就是每读到一个结点,把它插入到m结点前面位置,然后m结点接到读到结点的下一个。总共只需要一次扫描,所以时间是O(n),只需要几个辅助指针,空间是O(1)
参考代码:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { if(head == null) return null; ListNode dummy = new ListNode(0); dummy.next = head; ListNode preNode = dummy; int i=1; while(preNode.next!=null && i<m) { preNode = preNode.next; i++; } if(i<m) return head; ListNode mNode = preNode.next; ListNode cur = mNode.next; while(cur!=null && i<n) { ListNode next = cur.next; cur.next = preNode.next; preNode.next = cur; mNode.next = next; cur = next; i++; } return dummy.next; }}
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
- HDU2031 进制转换
- java concurrent
- Android开发之基础-------XML文件的序列化和解析
- DirectX11 光照实现
- 神兽出没
- Reverse Linked List II
- 会话管理技术Cookie&Session
- uva6195
- CRC-CCITT算法
- Proxy
- 安卓控件使用系列25:Spinner下拉列表控件的使用方法
- 双链表的实现C++封装
- Ubuntu用Wine运行Windows应用程序和卸载
- hdu 3971