Reverse Linked List II Java
来源:互联网 发布:买家怎么进淘宝试衣间 编辑:程序博客网 时间:2024/05/20 07:51
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.
Goal: reverse LinkNodes in range between m & n;
Solution_1:
Idea: easy to Implement if you fully understand the problem of Reverse Linked List
This is just a extension.
Use 3 addition nodes:
Prev: point to position of m-1
begin: point to position of m
end: point to position of n
call reverse function from Reverse Linked List by pass
reverse(prev, end.next);
public ListNode reverseBetween(ListNode head, int m, int n) { if(head==null | head.next==null) return head; ListNode dummy=new ListNode(0); dummy.next=head; ListNode prev=dummy; ListNode begin=head; while(m>1){ prev=begin; begin=begin.next; m--; } ListNode end=head; while(n>1){ end=end.next; n--; } reverse(prev,end.next); return dummy.next; } private ListNode reverse(ListNode dummy,ListNode afterend){ ListNode prev=dummy; ListNode cur=dummy.next; ListNode nextNode=cur.next; while(nextNode!=afterend){ cur.next=nextNode.next; nextNode.next=prev.next; prev.next=nextNode; nextNode=cur.next; } return dummy.next; }
Solution_2:
Key to solve:
Find 4 additional node as well, prevDummy, nextDummy, beign and end
prevDummy: connect with begin
beign: connect with end
nextDummy: store connection for end.next
end: connect with begin
In case of Given 1->2->3->4->5->NULL, m = 2 and n = 4,
beign node: 2; end node 4;
then reverse node using iterating methond of while loop
loop 1: 1->3->4->2->5->NULL
loop 2: 1->4->3->2->5->NULL
until beign==end, excit loop
public ListNode reverseBetween(ListNode head, int m, int n) { if(head==null || head.next==null) return head; ListNode prevDummy=new ListNode(0); prevDummy.next=head; ListNode nextDummy; ListNode begin=head; for (int i=1;i<m;i++) { prevDummy=begin; begin=begin.next; } ListNode end=head; for(int j=1;j<n;j++){ end=end.next; } while(begin!=end){ //save end.next into nextDummy node nextDummy=end.next; //move reverse node after end node end.next=begin; //connect to next node prevDummy.next=begin.next; //connect to right most portion begin.next=nextDummy; //connect to left most portion begin=prevDummy.next; } //becareful: in case of reverse from begin to n =>m==1 if(m==1) return prevDummy.next; else return head; }
- Reverse Linked List II Java
- Reverse Linked List II (Java)
- 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
- grep in Windows
- C++大学基础教程_11_10_实例研究:String类
- UVA 10561 - Treblecross(博弈SG函数)
- 启动tomcat报错 java.lang.Exception: Socket bind failed
- 使用JMX监控Tomcat
- Reverse Linked List II Java
- 经纬财富:廊坊7.16早间金银继续陷入震荡
- 小文件合并存储问题
- velocity基本语法
- fiddler工具教程
- 解决XP下使用雅黑字体韩文无法显示的问题
- wp7 XAP部署工具
- 阿里资深系统架构师九峰谈云计算
- 01spring spring的简单模拟