wl413911

链表成对反转
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def swapPairs(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
     """
     思路:
      1、需要定义一个变量存储新的head节点
      2、判断循环的判断条件:后面两个节点同时存在
      3、每次循环需要操作的元素
        pre:当前第一个节点的前驱节点
        a:当前第一个节点
        b:当前第二个节点(a的后继节点)
        b.next:当前第二个节点的 后继
        所以,每次循环共计涉及 4个节点,3个指针 : 由 pre -> a -> b -> (c = b.next) 变换为 pre -> b -> a -> c
        
      4、每次循环的最后,需要更新变量 pre 的指向(也就是pre = a),为下一次循环准备工作。
               
     """
        pre = self
        # 定义了next变量,用于存放head节点
        self.next = head
        while pre.next and pre.next.next:
            a = pre.next
            b = pre.next.next
            # pre->a->b->c  变换为 pre->b->a->c
            pre.next ,b.next,a.next = b,a,b.next

            pre = a
        
        # 返回head,新的head节点存储在self对象的next变量中
        return self.next

posted on 2020-05-20 08:26  wl413911  阅读(148)  评论(0编辑  收藏  举报