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

题目链接

https://leetcode.cn/problems/swap-nodes-in-pairs/

题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

思路

用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。

代码

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:     #举例[0,1,2,3]
        dummy_head=ListNode(next=head)                   #虚拟头结点,
        cur=dummy_head                                   #交换的两个节点是cur指向的节点后面的
        while cur.next!=None and cur.next.next!=None:
            temp=cur.next                               #临时指针,第一次循环,temp存放0节点
            temp1= cur.next.next.next                   #temp1存放2节点
            cur.next=cur.next.next                      #dummy_head后面接1节点(取代原来0节点的位置)
            cur.next.next=temp                          #cur.next就是1节点,此时成为了实际头结点,后面接0节点
            temp.next=temp1                             #0节点后接2节点,到这完成了0节点和1节点的交换
            #更新指针
            cur=cur.next.next                           #后移两位到此时的0节点,在3节点之前

        return dummy_head.next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值