分类:链表
难度:medium
- 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
题解
以一个节点为node,永远交换node.next 和node.next.next
不断循环这个过程即可
所以在最开始,新建一个节点,指向head,然后不断交换cur1,cur2:
pos.next = cur2
cur1.next = cur2.next
cur2.next = cur1
往后移动两个节点:
pos = pos.next.next
最后返回res.next即可
代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
res = ListNode(-1)
res.next = head
pos = res
if not pos or not pos.next or not pos.next.next:
return res.next
cur1,cur2 = pos.next,pos.next.next
while pos and cur1 and cur2:
pos.next = cur2
cur1.next = cur2.next
cur2.next = cur1
pos = pos.next.next
if pos.next and pos.next.next:
cur1,cur2 = pos.next,pos.next.next
else:
break
return res.next