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