LeetCode92 Reverse Linked List II

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值