LeetCode92 Reverse Linked List II
问题来源LeetCode92
问题描述
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.
问题分析
这道题目就是将给定范围内的链表求逆,也是简单的链表操作,这里我采用的是回溯的方法。递归到最后一层(范围内),然后回溯的过程中将节点node依次链接在一起。形成新的链表。完成后把后续不需要改变顺序的部分链接上。
代码如下
ListNode headHelp ;
ListNode node2;
public ListNode reverseBetween(ListNode head, int m, int n) {
if(head==null){
return head;
}
int i =1;
ListNode myHead = new ListNode(0);
ListNode first = myHead;
myHead.next= head;
while (i < m) {
myHead=myHead.next;
i++;
}
headHelp=myHead;
help(myHead.next,n,m);
headHelp.next=node2;
return first.next;
}
private void help (ListNode current,int n,int index){
ListNode next = current.next;
current.next=null;
if(index==n){
node2 = next;
headHelp.next =current;
headHelp=headHelp.next;
return;
}
help(next,n,index+1);
headHelp.next=current;
headHelp = headHelp.next;
}
LeetCode学习笔记持续更新
GitHub地址 https://github.com/yanqinghe/leetcode
CSDN博客地址 http://blog.csdn.net/yanqinghe123/article/category/7176678