/*
鍊錶中倒數第k個節點:
輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是
倒數第乙個節點。例如乙個鍊錶有6個節點,從頭節點開始它們的值依次是1,2,3,4,5,6。這個鍊錶的倒數第三個
節點是值為4的結點。
輸入:輸入可能包含多個測試樣例,輸入以eof結束。
對於每個測試案例,輸入的第一行為兩個整數n和k(0<=n<=1000, 0<=k<=1000):n代表將要輸入的鍊錶元素的個數,k代表要查詢倒數第幾個的元素。
輸入的第二行包括n個數t(1<=t<=1000000):代表鍊錶中的元素。
輸出:對應每個測試案例,
若有結果,輸出相應的查詢結果。否則,輸出null。
樣例輸入:
5 21 2 3 4 5
1 05
樣例輸出:
4null
要考慮k的取值:
k = 0,返回null
加入k > n,此時應該也返回null
0< k <= n,返回倒數第k個節點
*//*
關鍵: 若p1 = p2 = null,那麼p1走k步後,兩者一起走
*/#include const int inf = 1000000000;
const int maxsize = 1001;
typedef struct node
node;
void buildlist_headinsert(node** phead,int n,int* parr)
//頭插法的玄機:每次使新插入的節點指向剛剛的頭結點,然後使自己成為頭節點
//node* prearnode = *phead;
//prearnode->_next =
node* pnode,*pfrontnode,*prearnode;//因為剛開始的頭結點最終會在頭插法下變成最後的結點
for(int i = 0 ; i < n ;i++)
else
}prearnode->_next = null;//設定尾節點的指向為空
*phead = pfrontnode;
}void buildlist(node** phead,int n,int* parr)//採用尾插法
node* pcurnode;
for(int i = 0 ; i < n ; i++)
else//建立頭結點}}
void freelist(node** phead)//刪除鍊錶
}//倒數第k個節點,1,2,3,4,5,6,k = 3,可以另p1 = 1,p2 = 1,p1走到3處(走了k-1次),然後p2 與 p1 一起走剩下的n-k+1次,則p2一共走:
int reciprocalknode(int n,int k,int* parr)//
node* head = new node();
node** phead = &head;//這樣做的原因是:好讓頭指標能夠修改,若直接傳遞node*作為頭節點,則修改後會作為區域性變數最後消失
buildlist_headinsert(phead,n,parr);//建立鍊錶
node* p1,*p2;
p1 = p2 = *phead;
//p1先走k-1步之後,p1與p2再一起走
int icnt = 0;
while(p1->_next != null)
else//如果icnt 已經大於k-1,表名p1已經走完
p1 = p1 ->_next;
}int ires = p2->_ival;
freelist(phead);
return ires;
}void process()
int ires = reciprocalknode(n,k,iarr);
if(ires != inf)
else}}
int main(int argc,char* argv)
劍指offer面試題15
面試題15 鍊錶中倒數第k個結點 題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾結點是倒數第乙個結點。例如乙個鍊錶有6個結點,從頭結點開始它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個結點是值為4的結點。預備知識 鍊錶結點的定義如下 ...
劍指offer 面試題16 反轉鍊錶
題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。hint 請務必使用鍊錶 輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 1000 代表將要輸入的鍊錶的個數。輸入的第二行包含n個整數t 0 t 1000000 代表鍊錶元素。輸出 對應每個...
劍指Offer面試題16 反轉鍊錶
反轉鍊錶 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出翻轉後鍊錶的頭結點。分析 假設h,i,j三個節點。h節點已經指向前面的節點,i節點要指向h節點,這時,i與j中間斷開,因此在將i節點指向 h節點之前,先記下j節點。因此調整時 需要知道當前節點以及當前節點前面乙個節點,以及當前節點後面乙個...