题目分析:
这一题是把有序链表相邻的两个值进行两两交换,可以用两种方法解决。
1、创建一个新链表,逐个读取旧链表的值插入构成新链表。
2、直接更新原链表的值。
代码说明(1):
1、如果是第偶数项(从0开始)且为最后一个,那就不用交换,直接令新链表的下一项为最后一个即可。(如1->2->3种的3)
if i % 2 == 0 and not head.next:
bf.next = ListNode(head.val)
2、如果是第偶数项(从0开始),那么先把这个数存下来用于后续交换。
elif i%2 == 0:
up_num = head.val
3、如果是第奇数项(从0开始),那么让他与上一个记录的数交叉构成新链表,新链表指针后移两位。
else:
bf.next = ListNode(head.val)
bf.next.next = ListNode(up_num)
bf = bf.next.next
测试代码:
def print_ListNode(head):
while (True):
print(head.val)
if head.next is not None:
head = head.next
else:
break
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
list_node1_1 = ListNode(1)
list_node1_2 = ListNode(2)
list_node1_3 = ListNode(3)
list_node1_4 = ListNode(4)
list_node1_1.next = list_node1_2
list_node1_2.next = list_node1_3
list_node1_3.next = list_node1_4
class Solution:
def swapPairs(self, head):
nums, i = [], 0
bf = res = ListNode(-1)
if not head:return None
elif not head.next: return head
while(head):
if i % 2 == 0 and not head.next:
bf.next = ListNode(head.val)
elif i%2 == 0:
up_num = head.val
else:
bf.next = ListNode(head.val)
bf.next.next = ListNode(up_num)
bf = bf.next.next
head = head.next
i += 1
return res.next
print_ListNode(Solution().swapPairs(list_node1_1))
提交代码(1):
class Solution:
def swapPairs(self, head):
nums, i = [], 0
bf = res = ListNode(-1)
if not head:return None
elif not head.next: return head
while(head):
if i % 2 == 0 and not head.next:
bf.next = ListNode(head.val)
elif i%2 == 0:
up_num = head.val
else:
bf.next = ListNode(head.val)
bf.next.next = ListNode(up_num)
bf = bf.next.next
head = head.next
i += 1
return res.next
代码说明(2):
1、temp = head.val
临时变量存当前值
2、head.val = head.next.val
head.next.val = temp
互相交换
3、head = head.next.next
指针后移两位
提交代码(2):
class Solution:
def swapPairs(self, head):
bf_head = head
while(head):
temp = head.val
if not head.next:
break
head.val = head.next.val
head.next.val = temp
head = head.next.next
return bf_head