Saya memiliki daftar tertaut tunggal dasar dan saya mencoba menemukan indeks pertama dari daftar tertaut, di mana nilai tertentu ditemukan menggunakan rekursi. Saya telah menginisialisasi daftar tertaut dengan cara ini:

class Linkedlist:

    def __init__(self, value, tail):
        self.value = value
        self.tail = tail

Setelah ini ada metode lain yang berfungsi dengan baik, tetapi masalahnya adalah bagaimana saya dapat mengembalikan indeks pertama dalam daftar tertaut, di mana nilai x ditemukan? Saya telah mencoba yang berikutnya, tetapi hanya berfungsi untuk indeks pertama (0).

   def index(self, x):

        index = 0
        if x == self.value:
            return 0
        else:
            return Linkedlist.index(self.tail, index+1)

Saya pikir masalahnya adalah indeks tetap selalu nol. Bagaimana saya bisa mengatasi ini?

0
L0KiZ 30 Januari 2020, 01:18

2 jawaban

Jawaban Terbaik

Tidak perlu melewati index. Jika nilainya di sini, kembalikan 0. Jika tidak, dapatkan indeks di bagian ekor dan tambahkan 1.

def index(self, x):
    if x == self.value:
        return 0
    return self.tail.index(x) + 1
1
Kelly Bundy 29 Januari 2020, 22:35

index() perlu mengambil nilai yang Anda cari (x) dan juga indeks saat ini yang awalnya 0.

Asumsi yang saya buat:

  • value adalah kepala daftar tertaut.
  • tail adalah daftar tertaut.
  • Jika tidak ada suku berikutnya, tail adalah Tidak Ada.
class LinkedList:
    def __init__(self, value, tail):
        self.value = value
        self.tail = tail

    def index(self, x, i=0):
        if self.value == x:
             return i
        if self.tail is None:
             raise IndexError
        return self.tail.index(x, i+1)
1
blueteeth 29 Januari 2020, 22:30