鏈表中倒數第k個節點
鏈表中倒數第k個節點
輸入一個鏈表,輸出鏈表中倒數第k個節點。
思路:第一個指針從鏈表開頭先走k-1步,第二個指針保持不動。
之後,2個指針同時移動,直到第一個指針到達鏈表尾部。參考代碼:
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct listNode{ int value; struct ListNode* next;}ListNode;ListNode* findTailK(ListNode* phead,unsigned int k){ if(phead == NULL || k == 0) return NULL; ListNode* pAhead = phead; ListNode* pBehind = NULL; for(int i = 0;i < k - 1;i++) { if(pAhead && pAhead->next) pAhead = pAhead->next; else return NULL; } pBehind = phead; while(pAhead->next != NULL) { pAhead = pAhead->next; pBehind = pBehind->next; } return pBehind;}int main(){ ListNode* phead = NULL; for(int i = 0;i < 10;i++) { ListNode* pnew = malloc(sizeof(ListNode)); pnew->value = i; pnew->next = phead; phead = pnew; } ListNode* pfind = findTailK(phead,10); printf("%d
",pfind->value); return 0;}
推薦閱讀: