题目描述:
难点在于循环条件的控制:
代码:
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
node=ListNode() # 虚拟头结点
node.next=head # 虚拟头结点和链表相连
cur=node # cur在将要操作两个元素的前一个位置 此时要交换的是cur后面的两个结点
# 我们要交换的是cur后面的两个元素,一定要cur后面两个元素都不为空
while cur.next!=None and cur.next.next !=None: # cur.next是偶数个结点;cur.next.next表示奇数个结点
temp=cur.next # 第一个节点,防治断链
temp1=cur.next.next.next # 第三个结点,防治断链
cur.next=cur.next.next # 首先指向第二个节点
cur.next.next=temp # 第二个节点指向第一个结点
temp.next=temp1 # 第一个几点指向第三个结点
cur=cur.next.next # 进行下一轮之前,cur指向要交换的元素之前
return node.next # 虚拟头结点的下一个,才是真正的接点,虚拟头结点是为了方便操作