题目:
思路:
这个题目其实不难,但是我还是写了好久,思路清晰但是到了写代码还是有逻辑写错了,,所以折腾了好久。
思路其实是这样的,我们需要两个指针,分别设为p1 和 p2,这里我另外新建了一个结点,后面接交换过后的结点,这样就省去了考虑头结点head可能会丢失的问题,并且head指针应该是每次会向后移动2次,也就是p2结点的后一个结点;然后就是p1和p2指针的变化了,这里有一个要注意的问题,要避免指针循环像对方(类似于循环链表),并且当p1指向p2的下一个结点的时候要注意p2后是否还有结点,没有的话相当于是这个链表已经交换到最后的一个结点了,所以p1直接指向None)。并且链表的个数可能是奇数个,对于链表是奇数个的情况,那么p1还是可以继续指向p2的后一个结点,while循环结束后,最后剩下的一个结点要接上来,如果是偶数个,则最后一个if语句的判断不会执行。
代码:
# 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: ListNode) -> ListNode:
if head == None or head.next == None:
return head
else:
newList = ListNode(None)
n = newList
p1 = head
p2 = p1.next
while p2:
head = p2.next
n.next = p2
if p2:
p1.next = p2.next
else:
p1.next = None
p2.next = p1
n = p1
if head:
p1 = head
p2 = head.next
else:
break
if head:
n.next = head
return newList.next
代码写的还是很一般,还要继续修改,大家有好的方法也可以私信或者评论我。
结果:
关于LeetCode的解题方法欢迎大家一起讨论~
、