美文网首页
leetcode24. 两两交换链表中的节点 python实现

leetcode24. 两两交换链表中的节点 python实现

作者: vvblack4 | 来源:发表于2020-02-28 14:09 被阅读0次

题目:

leetcode24题目描述

解法1:

举例来说,给定链表如下(我们实现2和1的交换):
  1. 先在现有链表的头结点前面添加一个dummy结点,因为如果现有头结点1被删除或被移动了,需要1前面的dummy结点来记录位置。
  2. 首先把结点1和3连接到一起,因为如果先操作2和3,那么断开连接后就无法再对3操作了。
pre.next.next = p.next
  1. 然后把结点2和结点1连接。
p.next = pre.next
  1. 之后把dummy结点-1和结点2连接到一起。
pre.next = p
  1. 此时已经完成了结点2和结点1的交换,接下来要交换3和4,所以现在移动指针pre和指针p。pre指针移动到结点3前一个结点,即结点1。
pre = temp.next

具体代码如下:

# 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:
        dummyhead = ListNode(0)
        dummyhead.next = head   # 创建哑结点在头结点之前
        
        pre = dummyhead
        p = head
        while p is not None and p.next is not None:
            temp = p.next
            p.next = temp.next   # 1和3连接
            temp.next = pre.next # 2和1连接
            pre.next = temp      # 哑结点和2连接
            pre = p
            p = p.next
        return dummyhead.next

相关文章

网友评论

      本文标题:leetcode24. 两两交换链表中的节点 python实现

      本文链接:https://www.haomeiwen.com/subject/vywkhhtx.html