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 ≤ length of list.

1 /**
2  * Definition for singly-linked list.
3  * struct ListNode {
4  *     int val;
5  *     ListNode *next;
6  *     ListNode(int x) : val(x), next(NULL) {}
7  * };
8  */

代码:

 1 class Solution {
 2 public:
 3     ListNode *reverseBetween(ListNode *head, int m, int n) {
 4                            //短路原则
 5         if(head==nullptr || m>=n || n<1)
 6             return head;
 7         ListNode dummy = ListNode(-1);
 8         dummy.next = head;
 9         ListNode *pre = nullptr;
10         ListNode *p = &dummy;
11         int cnt = 0;//由于这里是从左往右的第几个节点,所以直接数出来就可以了
12         //每遇到一个非空节点,更新一下计数值
13         //按照前进步数的方法在m=1时不用走就到达了,会出现错误
14         while(p!=nullptr)
15         {
16             cnt++;
17             if(cnt == m)
18                pre = p;
19             if(cnt == n+1)
20                break;
21             p = p->next;
22         }
23         if(p==nullptr)
24             return head;
25         ListNode *next = p->next;
26         p->next = nullptr;
27         ListNode *cur = pre->next;
28         pre->next = nullptr;
29         pre->next = reverseList(cur);
30         cur->next = next;
31         return dummy.next;
32     }
33
34     ListNode *reverseList(ListNode *head)
35     {
36         if(head==nullptr || head->next==nullptr)
37             return head;
38         ListNode *last = nullptr;
39         ListNode *cur = head;
40         while(cur!=nullptr)
41         {
42             ListNode * temp = cur->next;
43             cur->next = last;
44             last = cur;
45             cur = temp;
46         }
47         return last;
48
49     }
50
51 };

原文地址:https://www.cnblogs.com/zjuhaohaoxuexi/p/11780106.html

时间: 2024-11-07 20:00:46

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

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

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

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. 假设我们有两个指

反转链表 II

反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度. 示例: 输入: 1->2->3->4->5->NULL, m = 2, n = 4 输出: 1->4->3->2->5->NULL 解题思路: 将第m个节点之后的(n-m)个节点依次插入第m个节点之前. 如示例中 将节点3插入1 .2中,1->3->2->4->5->NULL 将节点4插入1 .3中,1->4-&

[Swift]LeetCode92. 反转链表 II | Reverse Linked List II

Reverse a linked list from position m to n. Do it in one-pass. Note: 1 ≤ m ≤ n ≤ length of list. Example: Input: 1->2->3->4->5->NULL, m = 2, n = 4 Output: 1->4->3->2->5->NULL 反转从位置 m 到 n 的链表.请使用一趟扫描完成反转. 说明:1 ≤ m ≤ n ≤ 链表长度.

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

Leetcode:Reverse Linked List II 反转链表区间

Reverse Linked List 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