·题目描述
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
·解题思路
1.创建一个虚拟结点,用来挂上交换后的结果
2.在原始链表中使用指针point,先将point后一个结点挂上cur,再挂上point结点。然后point一次移动两步
3.注意的点在于,要避免形成环链表。因此还是用了一个post指针,用来存放point.next.next的地址,再将point.next.next指向point,避免形成环链表,并且保证了交换的相对位置
·代码
class ListNode(object):
#创建结点的类函数
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution(object):
def swapPairs1(self, head):
##链表中两两相邻结点减缓函数
dummy = ListNode()
cur = dummy
while head and head.next:
post = head.next.next
head.next.next = head
cur.next = head.next
head.next = None
cur = cur.next.next
head = post
if head and head.next is None:
cur.next = head
return dummy.next
def val(self,head):
##读取链表值的函数,用在pycharm中自我调试
cur = head
nums = []
while cur :
num = cur.val
nums.append(num)
cur = cur.next
return nums
if __name__ == "__main__":
#主函数
solution = Solution()
list = [1,2,3]
nodeList = solution.tramsfor(list)
head = solution.swapPairs1(nodeList)
nums = solution.val(head)
print(nums)