LeetCode(Python)链表题——206翻转链表、21合并有序链表、24两两交换链表中的节点

题号206

我们一直用的链表插入都是尾插法,头插法可以逆序实现.
秉承先连后断,利用头插法插入Q,q.next = p.next; p.next=q
在这里插入图片描述

class Solution:
    def reverseList(self, head: ListNode) -> ListNode:
        newlist = ListNode() #一个新链表头结点
        p = newlist   #P指向新链表
        q= head       #q指向旧链表
        
        while(q!=None): #按头插法依次向新链表中插入
            temp = q.next  #标记旧链表下一个要插入的
            q.next = p.next  #头插法
            p.next = q
            q=temp           #指向下一个要插入的

        return newlist.next #有头结点,所以从next开始返回

在这里插入图片描述

题号21

前面一篇博客里说了,不再赘述思想,用的是迭代法

class Solution:
    def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:
        new = ListNode()
        p = new
        while(l1!=None and l2!=None):
            if l1.val<=l2.val:
                p.next = l1
                l1 = l1.next
            else:
                p.next = l2
                l2 = l2.next
            p = p.next
        if l1!=None:
            p.next=l1
        if l2!=None:
            p.next=l2
        return new.next

题号24

前面一篇博客也写了,思想在这里

class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        res = ListNode()
        res.next=head  #指向head链表
        cur = res      #指向新建链表
        while cur.next!=None and cur.next.next!=None:
            nxt = head.next #指向第二个结点
            temp = nxt.next #指向第三个结点
            cur.next = nxt
            nxt.next = head
            head.next = temp
            cur = head
            head = temp
        return res.next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值