Saya sedang mengerjakan pertanyaan yang meminta untuk membalikkan daftar tertaut:

Contoh:

Untuk daftar tertaut 1->2->3, daftar tertaut terbalik adalah 3->2->1

Ini kode saya:

"""
Definition of ListNode

class ListNode(object):

    def __init__(self, val, next=None):
        self.val = val
        self.next = next
"""
class Solution:
    """
    @param head: The first node of the linked list.
    @return: You should return the head of the reversed linked list. 
                  Reverse it in-place.
    """
    def reverse(self, head):
        # write your code here
        prev = None
        current = head
        next = current.next
        while(current is not None):
            current.next = prev
            prev = current
            current = next
            next = next.next
        head = prev
        return prev

Setelah mengirimkan saya mendapat kesalahan. Adakah yang bisa membantu saya menunjukkan mengapa itu salah? Pesan kesalahan mengatakan bahwa "berikutnya = current.next AttributeError: objek 'NoneType' tidak memiliki atribut 'berikutnya'". Saya mencoba menggunakan referensi berikutnya ke simpul di sebelah simpul saat ini.

Terima kasih!

0
Xiang Li 11 Agustus 2017, 11:08

2 jawaban

Jawaban Terbaik

Anda mencoba mengakses next.next, tetapi next mungkin None (Anda memeriksa apakah current adalah None, tetapi Anda tidak memeriksa apakah next adalah None. next memang akan menjadi None pada iterasi terakhir dari loop). Jadi, Anda perlu memindahkan next=current.next di dalam loop, dan menghapus baris terakhir di loop, sebagai berikut:

def reverse(self, head):
        # write your code here
        prev = None
        current = head
        while(current is not None):
            next = current.next
            current.next = prev
            prev = current
            current = next
        return prev
5
Miriam Farber 11 Agustus 2017, 08:34

Masalah terjadi pada kasus terakhir. Ketika saat ini sama dengan simpul terakhir dalam daftar, Anda pergi ke assign next to equal next.next. Masalahnya adalah selanjutnya pada titik ini sama dengan nol, jadi ucapan Anda nol sama dengan null.null yang menyebabkan kesalahan Anda. Anda mungkin harus mengubah kondisi while loop Anda menjadi

while(next is not None):

Dan ubah tambahkan di bagian setelah memperbarui simpul terakhir dalam daftar untuk menunjuk ke yang sebelumnya

current.next = prev
head = prev
return prev
0
Lucas Hendren 11 Agustus 2017, 08:16