LeetCode92 Reverse Linked List II

来源:互联网 发布:知乎 博客园 csdn 编辑:程序博客网 时间:2024/06/06 05:31

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

原创粉丝点击