Jadual Kandungan
Pembalikan senarai terpaut ular sawa
Senarai terpaut terbalik
Penyelesaian
Kemahiran berkaitan senarai terpaut pembalikan Python
Formula utama
Terbalikkan selang yang ditentukan dalam senarai terpaut
Terbalikkan nod dalam senarai terpaut setiap kumpulan k
Rumah pembangunan bahagian belakang Tutorial Python Apakah kaedah penyongsangan senarai pautan python

Apakah kaedah penyongsangan senarai pautan python

Apr 29, 2023 pm 10:55 PM
python

    Pembalikan senarai terpaut ular sawa

    Senarai terpaut terbalik

    Saya berikan anda kepala nod kepala senarai pautan tunggal, sila balikkan senarai terpaut dan kembalikan senarai pautan terbalik.

    Apakah kaedah penyongsangan senarai pautan python

    • Input: kepala = [1,2,3,4,5]

    • Output: [5,4,3,2,1]

    Apakah kaedah penyongsangan senarai pautan python

    • Input: kepala = [1,2]

    • Output: [2,1]

    Contoh 3:

    • Input : head = []

    • Output: []

    Penyelesaian

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution:
        """
        解题思路:
        1.新建一个头指针
        2.遍历head链表,依次在新的头节点位置插入,达到反转的效果
        """
        def reverseList(self, head: ListNode) -> ListNode:
            # 循环
            new_head = None
    
            while head:
                per = head.next # pre 为后置节点,及当前节点的下一个节点
    
                head.next = new_head # 插入头节点元素
    
                new_head = head # 把串起来的链表赋值给头指针
    
                head = per  # 向后移一个单位
            
            return  new_head  # 返回一个新的链表
    Salin selepas log masuk

    Kemahiran berkaitan senarai terpaut pembalikan Python

    Memandangkan kepala nod pHead senarai terpaut tunggal (nod kepala mempunyai nilai, contohnya, dalam rajah di bawah, valnya ialah 1) dengan panjang n, selepas membalikkan senarai terpaut, kembalikan kepala senarai pautan baharu.

    Keperluan: kerumitan ruang O(1)O(1), kerumitan masa O(n)O(n).

    Apakah kaedah penyongsangan senarai pautan python

    Input:

    {1,2,3}

    Nilai pulangan:

    {3,2,1}

    Mari kita lihat kod senarai pautan terbalik yang paling asas:

    # -*- coding:utf-8 -*-
    # class ListNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.next = None
    class Solution:
        # 返回ListNode
        def ReverseList(self, pHead):
            # write code here
            cur = pHead
            pre = None
            while cur:
                nextNode = cur.next
                cur.next = pre
                pre = cur
                cur = nextNode
            return pre
    Salin selepas log masuk

    Formula utama

    Tangkap beberapa Perkara utama:

    • kur: nod kepala senarai terpaut asal Pada penghujung penyongsangan, cur menunjuk ke nod pra

    • .

      pra: Nod ekor senarai terpaut asal ialah nod kepala senarai terpaut terbalik. Pulangan terakhir adalah pra.

    • sementara cur: Mewakili syarat untuk membalikkan gelung, di sini adalah untuk menentukan sama ada cur kosong. Anda juga boleh menukar syarat soalan kepada keadaan gelung lain

    • untuk membalikkan nod ekor senarai terpaut Nod ekor di sini ialah Tiada, dan spesifikasi eksplisit akan disebut kemudian.

    Untuk masalah membalikkan senarai terpaut, fahami peranan utama nod kepala senarai terpaut asal, nod ekor senarai terpaut asal, keadaan gelung terbalik dan nod ekor senarai terbalik pada asasnya tiada masalah.

    Seterusnya, mari berikan dua contoh:

    Menterbalikkan selang yang ditentukan dalam senarai terpaut

    Menyongsangkan setiap nod k dalam senarai terpaut

    Terbalikkan selang yang ditentukan dalam senarai terpaut

    Terbalikkan selang antara kedudukan m dan kedudukan n dalam senarai terpaut dengan bilangan nod, memerlukan kerumitan masa O(n) dan kerumitan ruang O( 1).

    Keperluan: kerumitan masa O(n), kerumitan ruang O(n)

    Lanjutan: kerumitan masa O(n), kerumitan ruang O (1)

    Input:

    {1,2,3,4,5},2,4

    Nilai pulangan:

    {1,4,3,2,5}

    Gunakan formula

    Perbezaan antara soalan ini dan garis dasar ialah Tukar pembalikan keseluruhan senarai terpaut kepada pembalikan selang antara kedudukan m dan kedudukan n senarai terpaut Mari kita gunakan formula:

    • Nod kepala senarai terpaut asal: cur. : bermula dari kepala , kemudian ambil langkah m-1 untuk mencapai cur

    • Nod ekor senarai terpaut asal: pra: Nod di hadapan cur

    • Keadaan gelung terbalik : untuk i dalam julat(n,m)

    • Terbalikkan nod ekor senarai terpaut: anda perlu menyimpannya dan mulakan dari kepala, kemudian pergi m-1 langkah, apabila anda mencapai cur, pada masa ini pra kedudukan prePos. prePos.next ialah nod ekor senarai terpaut terbalik

    Berbanding dengan yang sebelumnya, anda perlu memberi perhatian tambahan:

    • . perlu disimpan dan dimulakan dari kepala , ambil langkah m-1 semula, dan apabila anda mencapai cur, kedudukan pra pada masa ini adalah prePos. Selepas kitaran pembalikan tamat, pergi melalui benang

    • Memandangkan keseluruhan senarai yang dipautkan tidak diterbalikkan, adalah lebih baik untuk mencipta dummyNode nod kepala maya baharu dan dummyNode.next menghala ke keseluruhan senarai terpaut

    Apakah kaedah penyongsangan senarai pautan python

    Pelaksanaan kod

    Pertama lihat kod bahagian formula:

    # 找到pre和cur
    i = 1
    while i<m:
        pre = cur
        cur = cur.next
        i = i+1
     
    # 在指定区间内反转
    preHead = pre
    while i<=n:
        nextNode = cur.next
        cur.next = pre
        pre = cur
        cur = nextNode
        i = i+1
    Salin selepas log masuk

    Membenang jarum dan bahagian benang kod:

    nextNode = preHead.next
    preHead.next = pre
    if nextNode:
        nextNode.next = cur
    Salin selepas log masuk

    Kod penuh:

    class ListNode:
        def __init__(self, x):
            self.val = x
            self.next = None
     
    class Solution:
        def reverseBetween(self , head , m , n ):
            # write code here
            dummpyNode = ListNode(-1)
            dummpyNode.next = head
            pre = dummpyNode
            cur = head
     
            i = 1
            while i<m:
                pre = cur
                cur = cur.next
                i = i+1
     
            preHead = pre
            while i<=n:
                nextNode = cur.next
                cur.next = pre
                pre = cur
                cur = nextNode
                i = i+1
            
            nextNode = preHead.next
            preHead.next = pre
            if nextNode:
                nextNode.next = cur
     
            return dummpyNode.next
    Salin selepas log masuk

    Terbalikkan nod dalam senarai terpaut setiap kumpulan k

    Terbalikkan nod dalam senarai terpaut yang diberikan setiap kumpulan k dan kembalikan flip Senarai terpaut akhir

    Jika bilangan nod dalam senarai terpaut bukan gandaan k, biarkan nod terakhir yang tinggal seperti sedia ada

    Anda tidak boleh menukar nilai dalam nod, hanya nod itu sendiri.

    memerlukan kerumitan ruang O(1) dan kerumitan masa O(n)

    Input:

    {1,2, 3, 4,5},2

    Nilai pulangan:

    {2,1,4,3,5}

    Gunakan formula

    Perbezaan antara soalan ini dan garis dasar ialah penyongsangan keseluruhan senarai terpaut ditukar kepada kumpulan penyongsangan k. Jika bilangan nod bukan gandaan k. baki Nod kekal seperti sedia ada.

    Mari kita lihat dalam bahagian dahulu Katakan kita menghadapi senarai terpaut dari kedudukan 1 ke kedudukan k:

    • Nod kepala senarai terpaut asal: cur: mulakan dari kepala dan pergi k -1 langkah untuk mencapai cur

    • 原链表的尾节点:pre:cur前面的节点

    • 反转循环条件:for i in range(1,k)

    • 反转链表的尾节点:先定义tail=head,等反转完后tail.next就是反转链表的尾节点

    先看下套公式部分的代码:

    pre = None
    cur = head
    tail = head
     
     
    i = 1
    while i<=k:
        nextNode = cur.next
        cur.next = pre
        pre = cur
        cur = nextNode
        i = i+1
    Salin selepas log masuk

    这样,我们就得到了1 位置1-位置k的反转链表。

    此时:

    • pre:指向反转链表的头节点

    • cur:位置k+1的节点,下一段链表的头节点

    • tail:反转链表的尾节点

    那么,得到位置k+1-位置2k的反转链表,就可以用递归的思路,用tail.next=reverse(cur,k)

    需要注意:如果链表中的节点数不是 k 的倍数,将最后剩下的节点保持原样

    i = 1
    tmp = cur
    while i<=k:
        if tmp:
            tmp = tmp.next
        else:
            return head
        i = i+1
    Salin selepas log masuk

    代码实现

    完整代码:

    class ListNode:
        def __init__(self, x):
            self.val = x
            self.next = None
     
    class Solution:
        def reverseKGroup(self , head , k ):
           
            # write code here
            return self.reverse(head, k )
        
        def reverse(self , head , k ):
            pre = None
            cur = head
            tail = head
     
            i = 1
            tmp = cur
            while i<=k:
                if tmp:
                    tmp = tmp.next
                else:
                    return head
                i = i+1
            
            i = 1
            while i<=k:
                nextNode = cur.next
                cur.next = pre
                pre = cur
                cur = nextNode
                i = i+1
     
            tail.next = self.reverse(cur, k)
            return pre
    Salin selepas log masuk

    好了,抓住几个关键点:

    • cur:原链表的头节点,在反转结束时,cur指向pre的下一个节点

    • pre:原链表的尾节点,也就是反转后链表的头节点。最终返回的是pre。

    • while cur:表示反转循环的条件,这里是判断cur是否为空。也可以根据题目的条件改成其他循环条件

    • 反转链表的尾节点,这里的尾节点是None,后面会提到显式指定。

    Atas ialah kandungan terperinci Apakah kaedah penyongsangan senarai pautan python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan Laman Web ini
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

    Alat AI Hot

    Undresser.AI Undress

    Undresser.AI Undress

    Apl berkuasa AI untuk mencipta foto bogel yang realistik

    AI Clothes Remover

    AI Clothes Remover

    Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

    Undress AI Tool

    Undress AI Tool

    Gambar buka pakaian secara percuma

    Clothoff.io

    Clothoff.io

    Penyingkiran pakaian AI

    AI Hentai Generator

    AI Hentai Generator

    Menjana ai hentai secara percuma.

    Artikel Panas

    R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
    2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Repo: Cara menghidupkan semula rakan sepasukan
    4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
    3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

    Alat panas

    Notepad++7.3.1

    Notepad++7.3.1

    Editor kod yang mudah digunakan dan percuma

    SublimeText3 versi Cina

    SublimeText3 versi Cina

    Versi Cina, sangat mudah digunakan

    Hantar Studio 13.0.1

    Hantar Studio 13.0.1

    Persekitaran pembangunan bersepadu PHP yang berkuasa

    Dreamweaver CS6

    Dreamweaver CS6

    Alat pembangunan web visual

    SublimeText3 versi Mac

    SublimeText3 versi Mac

    Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

    Bagaimana untuk mengintegrasikan perkhidmatan Node.js atau Python dengan cekap di bawah seni bina lampu? Bagaimana untuk mengintegrasikan perkhidmatan Node.js atau Python dengan cekap di bawah seni bina lampu? Apr 01, 2025 pm 02:48 PM

    Ramai pemaju laman web menghadapi masalah mengintegrasikan perkhidmatan node.js atau python di bawah seni bina lampu: lampu sedia ada (Linux Apache MySQL PHP) Laman web seni bina memerlukan ...

    Apakah sebabnya mengapa fail penyimpanan berterusan saluran paip tidak dapat ditulis apabila menggunakan crawler scapy? Apakah sebabnya mengapa fail penyimpanan berterusan saluran paip tidak dapat ditulis apabila menggunakan crawler scapy? Apr 01, 2025 pm 04:03 PM

    Apabila menggunakan crawler scapy, sebab mengapa fail penyimpanan berterusan paip tidak boleh ditulis? Perbincangan Ketika belajar menggunakan Crawler Scapy untuk Crawler Data, anda sering menemui ...

    Apakah sebabnya mengapa Pool Proses Python mengendalikan permintaan TCP serentak dan menyebabkan pelanggan terjebak? Apakah sebabnya mengapa Pool Proses Python mengendalikan permintaan TCP serentak dan menyebabkan pelanggan terjebak? Apr 01, 2025 pm 04:09 PM

    Proses Python Pool mengendalikan permintaan TCP serentak yang menyebabkan pelanggan terjebak. Apabila menggunakan Python untuk pengaturcaraan rangkaian, adalah penting untuk mengendalikan permintaan TCP serentak dengan cekap. …

    Bagaimana untuk melihat fungsi asal yang terkandung secara dalaman oleh python funcools.partial Object? Bagaimana untuk melihat fungsi asal yang terkandung secara dalaman oleh python funcools.partial Object? Apr 01, 2025 pm 04:15 PM

    Sangat meneroka kaedah tontonan python funcools.partial Object in Funcools.Partial Menggunakan Python ...

    Pembangunan Aplikasi Desktop Cross-Platform Python: Perpustakaan GUI mana yang terbaik untuk anda? Pembangunan Aplikasi Desktop Cross-Platform Python: Perpustakaan GUI mana yang terbaik untuk anda? Apr 01, 2025 pm 05:24 PM

    Pilihan Perpustakaan Pembangunan Aplikasi Desktop Python Python Banyak pemaju Python ingin membangunkan aplikasi desktop yang boleh dijalankan pada kedua-dua sistem Windows dan Linux ...

    Python Hourglass Graph Lukisan: Bagaimana untuk mengelakkan kesilapan yang tidak ditentukan? Python Hourglass Graph Lukisan: Bagaimana untuk mengelakkan kesilapan yang tidak ditentukan? Apr 01, 2025 pm 06:27 PM

    Bermula dengan Python: Lukisan Grafik Hourglass dan Pengesahan Input Artikel ini akan menyelesaikan masalah definisi berubah -ubah yang dihadapi oleh pemula python dalam program lukisan grafik Hourglass. Kod ...

    Bagaimana cara mengira dan menyusun set data produk yang besar di Python? Bagaimana cara mengira dan menyusun set data produk yang besar di Python? Apr 01, 2025 pm 08:03 PM

    Penukaran dan Statistik Data: Pemprosesan yang cekap bagi set data besar Artikel ini akan memperkenalkan secara terperinci bagaimana untuk menukar senarai data yang mengandungi maklumat produk kepada yang lain yang mengandungi ...

    Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Bagaimana untuk menyelesaikan masalah kebenaran yang dihadapi semasa melihat versi Python di Terminal Linux? Apr 01, 2025 pm 05:09 PM

    Penyelesaian kepada Isu Kebenaran Semasa Melihat Versi Python di Terminal Linux Apabila anda cuba melihat versi Python di Terminal Linux, masukkan Python ...

    See all articles