![f6c01e47c2dbaa7813b193ed4f28744d.png](https://i-blog.csdnimg.cn/blog_migrate/eb0c3dfc27eac132ba85fdb93479b035.png)
25.K个一组的翻转链表(难)
给定一个链表,一次反转链表k的节点并返回其修改后的列表。
k是一个正整数,并且小于或等于链接列表的长度。如果节点数不是k的倍数,那么最后剩下的节点应保持原样。
给定此链接列表: 1->2->3->4->5
对于k = 2,您应该返回:2->1->4->3->5
对于k = 3,您应该返回:3->2->1->4->5
92.反转链表II(中)
反转从位置m到n的链表。请使用一趟扫描完成反转。
说明:
1 ≤ m ≤ n ≤ 链表长度。
输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL
思路:找到要反转的然后一步步反转,最后再接上
class Solution:
def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:
x = dummy = ListNode(0)
dummy.next = head
for _ in range(m - 1): #找点
x = x.next
current, previous = x.next, None
for _ in range(n - m + 1):
current.next, previous, current = previous, current, current.next#反转
x.next.next = current #接上
x.next = previous
return dummy.next
206.反转链表(易)
反转一个单链表。
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
思路:我记得学数据结构学过一个头插法
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next:
return head
new = None
while head:
new,new.next,head=head,new,head.next
return new