[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 ≤ length of list.
206. Reverse Linked List的拓展,这里只是反向一个链表中的一部分。先建立一个新list node: dummy,用dummy链接m之前不用反向的node,然后反向m~n的节点,最后在把反向的连接起来。
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | /** * Definition for ListNode * public class ListNode { * int val; * ListNode next; * } */ public class Solution { public ListNode reverseBetween(ListNode head, int m, int n) { if (m >= n || head == null ) { return head; } ListNode dummy = new ListNode( 0 ); dummy.next = head; head = dummy; for ( int i = 1 ; i < m; i++) { if (head == null ) { return null ; } head = head.next; } ListNode premNode = head; ListNode mNode = head.next; ListNode nNode = mNode, postnNode = mNode.next; for ( int i = m; i < n; i++) { if (postnNode == null ) { return null ; } ListNode temp = postnNode.next; postnNode.next = nNode; nNode = postnNode; postnNode = temp; } mNode.next = postnNode; premNode.next = nNode; return dummy.next; } } |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | class Solution: def reverse( self , head): prev = None while head ! = None : next = head. next head. next = prev prev = head head = next return prev def findkth( self , head, k): for i in xrange (k): if head is None : return None head = head. next return head def reverseBetween( self , head, m, n): dummy = ListNode( - 1 , head) mth_prev = self .findkth(dummy, m - 1 ) mth = mth_prev. next nth = self .findkth(dummy, n) nth_next = nth. next nth. next = None self .reverse(mth) mth_prev. next = nth mth. next = nth_next return dummy. next |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class Solution: def reverseBetween( self , head, m, n): dummyNode = ListNode( 0 ) p = dummyNode q = head for x in range (m - 1 ): p. next = q q = q. next p = p. next start = None end = q next = None for x in range (m, n + 1 ): next = q. next q. next = start start = q q = next p. next = start end. next = next return dummyNode. next |
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public : ListNode* reverseBetween(ListNode* head, int m, int n) { ListNode dummy{0}; dummy.next = head; auto *prev = &dummy; for ( int i = 0; i < m - 1; ++i) { prev = prev->next; } auto *head2 = prev; prev = prev->next; auto *cur = prev->next; for ( int i = m; i < n; ++i) { prev->next = cur->next; // Remove cur from the list. cur->next = head2->next; // Add cur to the head. head2->next = cur; // Add cur to the head. cur = prev->next; // Get next cur. } return dummy.next; } }; |
类似题目:
[LeetCode] 206. Reverse Linked List 反向链表
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用