小黑代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
if not head:
return
# 增加头节点
add_node = ListNode()
add_node.next = head
# 定义三个指针
pre = add_node
cur = head
next_ = head.next
# 开始进行三指针迭代
while next_:
pre.next = next_
cur.next = next_.next
next_.next = cur
pre = cur
cur = pre.next
if not cur:
break
next_ = cur.next
return add_node.next
递归法
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
# 递归出口,后面没有两个结点
if not head or (not head.next):
return head
# 深度递归
after = self.swapPairs(head.next.next)
# 修改当前两个结点位置
next_ = head.next
next_.next = head
head.next = after
return next_
非递归法
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
# 附加头结点
add_node = ListNode()
add_node.next = head
# 初始化前置指针
pre = add_node
# 开始进行迭代,当后面不足两个结点时跳出
while pre.next and pre.next.next:
# 需要交换位置的两个结点
start = pre.next
end = pre.next.next
# 后续结点的头指针
after = end.next
# 开始进行交换操作
pre.next = end
end.next = start
start.next = after
# 前置结点继续向前移动
pre = start
return add_node.next
小黑生活
麦当劳早餐
午餐干饭
晚餐跟家里涮一点儿羊肉
早餐烤冷面
来个肥宅水
午餐干饭
准备当单位象棋比赛裁判
晚餐干饭
仰山十攀越野跑,星历忘记更新了,手表gps失常了
麦当劳早餐
午餐干饭
下午学术沙龙
之后新入职人员廉政谈话
晚上继续涮羊肉
麦当劳早餐
午餐干饭
象棋比赛决赛裁判
下午支部活动
长安街的晚霞还是比较好看的
晚餐干饭
简单理个发
早餐麦当劳
南二环当530配速员稳稳当当
下午麦当劳来个香草麦旋风
周日晚上去大黑驴的出租屋里涮火锅喝酒
麦当劳早餐
午饭干饭
午后咖啡
麦当劳早餐
追动漫强风吹拂
报名重庆马拉松,进入抽签状态
午餐干饭
午后咖啡刷算法题
回家路上麻辣烫串串
健身房练背
早餐干饭
午餐干饭
午后咖啡
晚餐刀削面干饭
仰山十攀越野跑,跑出来最好成绩,想想就激情
麦当劳早餐
一天的初级党课
午餐干饭
午后咖啡
下午继续上党课
党课闭卷考点
回家路上麻辣烫
健身房练腿
跟舞花儿侠商量苏州半程马拉松特种兵计划
起床后嗓子疼低烧,跟阳了差不多,麦当劳早餐
参观党史展览馆
午餐干饭
午后咖啡
南京马拉松大众一级证书下来了
身体难受,但还是去了北京南站火车站,坐一等动卧前往苏州
火车上嗓子开始疼,低烧了,好难受啊,一直喝水压下去
看到了天津之眼