Leetcode 92. 反转链表 II

反转从位置 mn 的链表。请使用一趟扫描完成反转。

说明:
1 ≤ m ≤ n ≤ 链表长度。

示例:

输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

思路:分成两个情况来写第一种:如果m=1,那就是一道反转链表,先翻转m-n的节点,翻转后,头结点就变成了尾节点,所以把这些节点保存起来,然后再把后面的节点接到尾节点第二种:如果!=1,翻转m到n的中间节点即可

 1 public class 反转链表II {
 2     ListNode reverseBetween(ListNode head, int m, int n) {
 3         if(head==null||head.next==null)
 4             return head;
 5
 6         if(m!=1)
 7         {
 8             ListNode first=head;//记录翻转处的前一个节点
 9             ListNode temp=head.next;//记录尾节点
10             for(int i=0;i<m-2;i++)
11             {
12                 temp=temp.next;
13                 first=first.next;
14             }
15             ListNode la=temp;
16             ListNode pre=temp;//反转的起始节点
17             ListNode p=temp.next;
18             ListNode next=null;
19             for(int i=0;i<n-m;i++)
20             {
21                 next=p.next;
22                 p.next=pre;
23                 pre=p;
24                 p=next;
25             }
26             first.next=pre;
27             la.next=p;
28
29         }
30         else {
31             ListNode pre=head;
32             ListNode la=pre;
33             ListNode p=head.next;
34             ListNode next=null;
35
36             for(int i=0;i<n-m;i++)
37             {
38                 next=p.next;
39                 p.next=pre;
40                 pre=p;
41                 p=next;
42             }
43             la.next=p;
44             return pre;//反转后的头结点
45
46         }
47
48         return head;
49     }
50     public static void main(String argc[])
51     {
52
53     }
54 }

原文地址:https://www.cnblogs.com/tijie/p/9940155.html

时间: 2024-10-03 21:53:34

Leetcode 92. 反转链表 II的相关文章

LeetCode——92. 反转链表 II

反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明: 1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL https://leetcode-cn.com/problems/reverse-linked-list-ii/ 迭代 1 -> 2 -> 3 -> 4 -> 5 -> NULL 1 -

Leetcode 92.反转链表

92.反转链表 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 详解见图: 1 public class Solution { 2 public class ListNode { 3 int val; 4 ListNode next; 5 6 ListNode(in

92. 反转链表 II

题目描述: 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 ≤

leetCode 92.Reverse Linked List II (反转链表II) 解题思路和方法

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 ≤ le

每天一道面试题LeetCode 206 -- 反转链表

LeetCode206 反转链表 思路 代码 # # @lc app=leetcode.cn id=206 lang=python3 # # [206] 反转链表 # # https://leetcode-cn.com/problems/reverse-linked-list/description/ # # algorithms # Easy (61.53%) # Likes: 624 # Dislikes: 0 # Total Accepted: 112.8K # Total Submiss

Leetcode 142.环形链表II

环形链表II 给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 说明:不允许修改给定的链表. 进阶:你是否可以不用额外空间解决此题? 链表头是X,环的第一个节点是Y,slow和fast第一次的交点是Z.各段的长度分别是a,b,c,如图所示.环的长度是L. 第一次相遇时slow走过的距离:a+b,fast走过的距离:a+b+c+b. 因为fast的速度是slow的两倍,所以fast走的距离是slow的两倍,有 2(a+b) = a+b+c+b,可以得到a=c(这个结论

leetcode 206. 反转链表(Reverse Linked List)

目录 题目描述: 示例: 进阶: 解法: 题目描述: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代或递归地反转链表.你能否用两种方法解决这道题? 解法: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode

C语言实现反转链表 II(指定2个节点反转)

要求: 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL 方法迭代链接反转 算法 在看具体算法之前,有必要先弄清楚链接反转的原理以及需要哪些指针.举例而言,有一个三个不同结点组成的链表 A → B → C,需要反转结点中的链接成为 A ← B ← C. 假设我们有两个指

LeetCode OJ:Reverse Linked List II(反转链表II)

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 ≤ lengt