題目:輸入乙個鍊錶,輸出該鍊錶的倒數第k個節點。為了符合大多數的習慣,最後乙個節點從1開始計數,即鍊錶的尾部節點為倒數第乙個節點。
鍊錶定義如下:
struct listnode;
listnode* createlistnode(int value)
void connectlistnodes(listnode* pcurrent, listnode* pnext)
pcurrent->m_pnext = pnext;
}void printlistnode(listnode* pnode)
else
}void printlist(listnode* phead)
printf("\nprintlist ends.\n");
}void destroylist(listnode* phead)
}listnode * findkthtotail(listnode* plisthead,unsigned int k)
pfirst=pfirst->m_pnext;
i++;
} if(i==k) pk=plisthead;
return pk;
}// //********************測試**********************
// 測試要找的結點在鍊錶中間
void test1()
// 測試要找的結點是鍊錶的尾結點
void test2()
// 測試要找的結點是鍊錶的頭結點
void test3()
// 測試空鍊錶
void test4()
// 測試輸入的第二個引數大於鍊錶的結點總數
void test5()
// 測試輸入的第二個引數為0
void test6()
int main(int argc, char* argv)
刪除鍊錶中倒數第K個節點
這裡演算法的思路很簡單,就是利用雙指標進行定位,筆記主要記錄的是c 的一些基礎知識,也就是關於指標傳遞的一些知識。bool deletelistnode int k,list list 傳入的是鍊錶指標的引用,也就是直接操作實參鍊錶,好處是當需要刪除首指標時,可以將鍊錶的head向next賦值即可,...
鍊錶中刪除倒數第K個節點
分別實現兩個函式,乙個可以刪除單鏈表中倒數第k個節點,另乙個可以刪除雙鏈表中倒數第k個節點。從問題當中,我們只能得到乙個鍊錶和要刪除的第k個節點的資訊,於是就有以下思路 如果鍊錶為空或者k 0時,直接返回 如若不然,遍歷鍊錶的每個節點,每經過乙個節點k減1。比如對於1 2 3 4該鍊錶的過程如下 k...
在鍊錶中刪除倒數第K個節點
給出乙個單鏈表,返回刪除單鏈表的倒數第 k 個節點的鍊錶。輸入描述 n 表示鍊錶的長度。val 表示鍊錶中節點的值。輸出描述 在給定的函式內返回鍊錶的頭指標。示例1輸入5 4 1 2 3 4 5輸出1 3 4 5備註 1 k n 1 06 1 leq k leq n leq 10 6 1 k n 1...