求鍊錶倒數第k個節點

2021-09-12 07:08:44 字數 1403 閱讀 8309

1.初解

public static node findkthtotail(node head, uint k)

behind = head;

while (ahead.next != null)

return behind;

}

上面的**存在3處魯棒性問題:

(1)輸入的head為空指標。由於**會試圖訪問空指標指向的記憶體,程式崩潰

解決:在處理前增加判斷空指標的**

(2)輸入的以head為頭結點的鍊錶的結點總數少於k。由於在for迴圈中會在鍊錶上向前走k-1步,仍然會由於空指標造成程式崩潰

(3)輸入的引數k為0。由於k是乙個無符號整數,那麼在for迴圈中k-1得到的將不是-1,而是4294967295(無符號的0xffffffff)。因此for迴圈執行的次數遠遠超出我們的預計,同樣也會造成程式崩潰

解決:同(1),在處理前的判斷中也判斷引數k是否為0。

public static node findkthtotail(node head, uint k)

node ahead = head;

node behind = null;

for (int i = 0; i < k - 1; i++)

else

}behind = head;

while (ahead.next != null)

return behind;

}

(1)功能測試

// 01.測試要找的結點在鍊錶中間

[testmethod]

public void findkthnodetest1()

// 02.測試要找的結點是鍊錶的尾結點

[testmethod]

public void findkthnodetest2()

// 03.測試要找的結點是鍊錶的頭結點

[testmethod]

public void findkthnodetest3()

(2)特殊輸入測試

// 04.測試空鍊錶

[testmethod]

public void findkthnodetest4()

// 05.測試輸入的第二個引數大於鍊錶的結點總數

[testmethod]

public void findkthnodetest5()

// 06.測試輸入的第二個引數等於0

[testmethod]

public void findkthnodetest6()

求煉表中倒數第K個節點

求煉表中倒數第k個節點,思路很簡單我們在遍歷時維持兩個指標,第乙個指標從鍊錶的頭指標開始遍歷,在第k 1步之前,第二個指標保持不動 在第k 1步開始,第二個指標也開始從鍊錶的頭指標開始遍歷。由於兩個指標的距離保持在k 1,當第乙個 走在前面的 指標到達鍊錶的尾結點時,第二個指標 走在後面的 指標正好...

鍊錶倒數第k個節點

兩個指標一前一後,相距k即可。include include using namespace std struct linknode typedef linknode linklist void insertlist linklist list int data else linknode rese...

鍊錶 倒數第k個節點

問題 刪除倒數第k個節點 鏈結 雙指標法,開始時p1,p2都指向頭節點,先讓p2走k步,然後p1和p2一起走,當p2指向null時,p1就指向倒數第k個節點了 definition for singly linked list.struct listnode class solution retur...