LeeteCode 查詢鍊錶中倒數第k個節點

2021-10-05 15:02:24 字數 860 閱讀 4142

輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。鍊錶的尾節點是倒數第1個節點。

例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個鍊錶的倒數第3個節點是值為4的節點。

鍊錶節點的定義:

definition for singly-linked list.

public

class

listnode

}

方法一:通過求得鍊錶長度來確定倒數第k個節點的位置

**如下:

class

solution

return p;

}public

intgetlength

(listnode head)

return count;

}}

方法二:前後指標法

定義兩個指標former和latter,二者同時指向head節點。

讓former先行,latter先不動,在former行第k個節點後才開始向後走。

當former走到鍊錶的最後乙個節點時,latter指向的就是倒數第k個節點。

**如下;

class

solution

// 當k=1時,former與latter正好相距k-1個節點

if(k >1)

former = former.next;

latter = latter.next;

}return latter;

}}

二者的時間複雜度都為o(n),方法一需要重複遍歷,方法二只需一次遍歷,所以方法二更優。

鍊錶的倒序查詢

我所使用的方法在輸入的時候是使用乙個棧儲存所有的資料,利用的是其先進後出的資料結構。當然,用乙個陣列也是可以的 而且我覺得還可以儲存資料,而用stack的話操作比較麻煩。include include include include define len sizeof node using name...

LeeteCode 鍊錶的中間節點

給定乙個不帶頭結點的非空鍊錶,返回鍊錶的中間節點,如果有兩個中間節點,則返回第二個中間節點。節點定義 public class listnode 方法一 陣列法 遍歷一次鍊錶中的資料,將其全部傳入乙個陣列,然後直接訪問得到鍊錶的中間節點。class solution while a.back nex...

鍊錶實現倒序數字相加

陣列作為資料儲存結構有一定的缺陷。無序陣列中搜尋效能差,有序陣列中,插入效率低。兩種陣列的刪除效率都很低。並且,陣列在建立後大小就固定了,設定過大會造成記憶體浪費,過小不能滿足資料儲存的需要。陣列是一種通用資料結構,可以用來實現棧,佇列等很多資料結構。鍊錶也是一種通用資料結構,可以作為實現棧,佇列等...