Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given1->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.Tips:给定一个链表,与两个整数m ,n;
从m位置开始,到n位置结束,反转这段链表,返回翻转后的链表。
思路:先让pre指针向前走m-1个位置,记住当前的结点 NodeBeforeM。
在让pre指针想下走一个位置到达m处,记下当前结点为nodeM
m+1位置的结点记为 cur
从m~n 通过改动指针的方式来翻转这段链表,代码如下
for(int i=m;i
结束循环之后,
pre结点指向n位置的结点
cur结点指向n+1位置的结点
再将NodeBeforeM cur结点与翻转后的结点 前后连接起来 就可以了。
整体代码如下:
package medium;import dataStructure.ListNode;public class L92ReverseLinkedListII { public ListNode reverseBetween(ListNode head, int m, int n) { if(head==null ||m<=0||n<=0||m>n) return null; if(m==n) return head; ListNode node = new ListNode(0); ListNode pre=node; pre.next=head; node=pre; for(int i=1;i
输出结果如下:
nodeBaforeM:1nodeM:2cur3!!!!!!!!!!!!pre4cur5next6!!!!!!!!!!!!m=2;~~~~~n=4;1 ->2 ->3 ->4 ->5 ->6 ->7 ->8 ->9 ~~~~~~~~~~~~~~~~~~~~~~~1 ->4 ->3 ->2 ->5 ->6 ->7 ->8 ->9