classSolution:defreverseList(self, head: ListNode)-> ListNode:# 双指针法,有点难理解,还是看解释吧QAQ。反正结果是从后往前构造的,不断地添加前面结点
cur, pre = head,Nonewhile cur:
tmp = cur.next
cur.next= pre
pre = cur
cur = tmp
return pre
剑指offer 22 链表中倒数第k个节点
classSolution:defgetKthFromEnd(self, head: ListNode, k:int)-> ListNode:# 法一:确定返回的列表和原列表中间距离即可得到结果,这个距离是len-k
res=[]
pre = head
while head.next:
res.append(head.val)
head = head.next
res.append(head.val)
skip =len(res)- k
while skip:
pre = pre.next
skip -=1return pre
# 法二:双指针,第一个指针先走k步,然后一起走到终点,没走完的那个还剩k步,就是结果# 这样就不用统计链条长度len,非常节省时间
p, q = head, head
while k:
p = p.next
k -=1while p:
p = p.next
q = q.nextreturn q
classSolution:defexchange(self, nums: List[int])-> List[int]:# 双指针, 奇数往前放,偶数往后放。只需要一遍,不过空间复杂度很高。
left, right =0,len(nums)-1
res =[-1]*len(nums)for ele in nums:if ele %2==1:
res[left]= ele
left +=1else:
res[right]= ele
right -=1return res