难度:中等。
题目要求及示例:
在做题之前先把思路理清楚,不同情况不同解决方法,可以通过画图来梳理思路。
开头的两个节点和后面节点的处理方法不同,开头节点需要记录交换后的头结点。注意链表节点总个数是奇数时,最后一个结点的处理。
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head == None or head.next == None:
return head
p = head
# 头两个的交换
node1 = p
node2 = p.next
node1.next = node2.next
node2.next = node1
preNode = node1
p = p.next
head = node2 #重要!!改变头结点。
while p != None:
if p.next == None: #最后的单个结点
return head
#除开头两个的交换
node1 = p
node2 = p.next
node1.next = node2.next
node2.next = node1
preNode.next = node2
preNode = node1
p = p.next
return head
这个题目真的挺简单的吧,难度标着中等,但是对我这个菜鸟来说竟然很快就做出来了,对照了一下题解都差不多。