【LeetCode】24. Swap Nodes in Pairs 解题报告(Python)

题目分析:

这一题是把有序链表相邻的两个值进行两两交换,可以用两种方法解决。
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

猜你喜欢

转载自blog.csdn.net/L141210113/article/details/88244219