leetcode 24. 两两交换链表中的节点

'''
leetcode 24 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

给定 1->2->3->4, 你应该返回 2->1->4->3.
'''
# Definition for singly-linked list.
class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        if head is None or head.next is None:
            return head
        # 则当前的单向链表长度大于等于2
        # 在头部添加哨兵节点
        p1=ListNode(0)
        p1.next=head
        result=p1
        p2=head
        p3=p2.next
        while(p1 is not None and p3 is not None and p2 is not None):
            p1.next=p3
            p2.next=p3.next
            p3.next=p2

            if p2.next==None:
                break
            p1=p2
            p2=p1.next
            p3=p2.next
        return result.next

if __name__=="__main__":
    start=ListNode(0)
    p=start
    for val in [1,2,3,4,5,6,7,8,9]:
        new_node=ListNode(val)
        start.next=new_node
        start=start.next
    output=Solution().swapPairs(p.next)
    while(output):
        print(output.val)
        output=output.next

 

你可能感兴趣的:(python,leetcode)