码迷,mamicode.com
首页 > 编程语言 > 详细

【数据结构】算法 Reverse Linked List II 反转链表的一部分

时间:2021-03-10 13:27:14      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:数据结构   init   反转   调用   new   nod   tween   lang   链表   

Reverse Linked List II 反转链表

Given the head of a singly linked list and two integers left and right where left <= right, reverse the nodes of the list from position left to position right, and return the reversed list.

将链表从第left节点开始到第right个节点结束的一段进行翻转

Input: head = [1,2,3,4,5], left = 2, right = 4
Output: [1,4,3,2,5]

虚头法 dummy head+递归

声明一个虚头节点并指向head,

首先寻找到left的前一个node,然后开始调用reversN,reversN最后返回的node就是反转后的头节点。将之前第left-1的节点和返回的节点连接,就欧了。

 /**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode reverseBetween(ListNode head, int left, int right) {
        ListNode vitrualnode = new ListNode(0, head);
                ListNode pre = vitrualnode;//
                int move = left-1;
                while(move>0){
                    pre= pre.next;
                    move--;
                }
                pre.next = reversN(pre.next, right - left + 1);

                return vitrualnode.next;
    }
    public ListNode reversN(ListNode head,int n){
        if(n ==1){
            return head;
        }
        ListNode tail = head.next;
        ListNode p = reversN(head.next,n-1);
        head.next= tail.next;
        tail.next = head;
        return p;
    }
}

【数据结构】算法 Reverse Linked List II 反转链表的一部分

标签:数据结构   init   反转   调用   new   nod   tween   lang   链表   

原文地址:https://www.cnblogs.com/dreamtaker/p/14509149.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!