classListNode:def__init__(self, val=0,next= node):
self.val = val
self.next=nextclassSolution:defreverseList(self, head):
pre =None
cur = head
while cur:next= cur.next
cur.next= pre
pre = cur
cur =nextreturn pre
classSolution:defreverseBetween(self, head, left, right):
p0 = dummy = ListNode(next= head)# 这样一起实例化,p0和dummy永远都是指向同一位置for _ inrange(left-1):
p0 = p0.next# 知道转换的前一个结点
pre =None
cur = p0.next# 当前正在处理的节点for _ inrange(right-left+1)
nxt = cur.next
cur.nxt = pre
pre = cur
cur = nxt
p0.next.next= cur
p0.next= pre
return dummy.next
代码:
classSolution:defreverseKGroup(self, head, k):
n =0
cur = head
while cur:
n +=1
cur = cur.next
p0 = dummy = ListNode(next= head)
pre =None
cur = head
# k个一组处理while n >= k:
n -= k
for _ inrange(k):
nxt = cur.next
cur.next= pre
pre = cur
cur = nxt
nxt = p0.next
nxt.next= cur
p0.next= pre
p0 = nxt
二、148. 排序链表
2.1、876. 链表的中间结点
代码:这道题典型的快慢指针
# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclassSolution:defmiddleNode(self, head: Optional[ListNode])-> Optional[ListNode]:
t1 = t2 = head
while t2 and t2.next:
t1 = t1.next
t2 = t2.next.nextreturn t1
2.2、21. 合并两个有序链表
代码:
classSolution:defmergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode])-> Optional[ListNode]:
dummy = ListNode()
cur = dummy
while list1 and list2:if list1.val <= list2.val:
cur.next= list1
cur = cur.next
list1 = list1.nextelse:
cur.next= list2
cur = cur.next
list2 = list2.nextif list1:
cur.next= list1
else:
cur.next= list2
return dummy.next