面試題16 反轉鍊錶

2021-07-27 08:31:24 字數 712 閱讀 1200

問題:定義乙個函式,輸入乙個鍊錶的表頭結點,反轉該鍊錶並輸出反轉後的頭結點。鍊錶結點定義如下:

struct node

;

思路:假設該鍊錶為a->b->c->d->e,根據題意,需要將鍊錶變為a<-b<-c<-d<-e。

當我們使用2個指標的時候p1,p2。若將p1指向a,將p2指向b,需要執行b->next = a; 此時鍊錶變為a<-b c->d->e,鍊錶從中間斷開,不能在往下進行操作。

所以這時候我們還需要使用乙個指標p3,來儲存p2後面乙個結點。下一次迴圈的時候,p1指向b,p2指向c,p3指向d。

令c->next = b;p1p2p3往後順挪一位,直至p2==null的時候結束迴圈。

下面**還新增了鍊錶的插入和顯示操作。

struct node

;//反轉鍊錶

node* reverse(node *l)

return p1;

}void addnode(node *l, int value) //帶頭指標的單鏈表

while(q->next != null)

q->next = p;

p->next = null;

}void shownode(node* l)

}int main(int argc, const char * argv)

面試題16 反轉鍊錶

題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。hint 請務必使用鍊錶 輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 1000 代表將要輸入的鍊錶的個數。輸入的第二行包含n個整數t 0 t 1000000 代表鍊錶元素。輸出 對應每個...

面試題16 反轉鍊錶

題目 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。思路 設定三個指標p q temp,p用來指向當前結點,q用來指向當前結點的前乙個結點,temp指向當前結點的下乙個結點,遍歷鍊錶的結點時,先儲存當前結點p的下乙個結點到temp,然後讓當前結點的next指向前乙個結點p,...

面試題16 反轉鍊錶

題目 反轉鍊錶。輸入鍊錶的頭結點,反轉輸出反轉後鍊錶的頭結點。這種鍊錶操作的題之前做過,還專門寫過鍊錶反轉的東東。咋一看,覺得這用遞迴不so easy嗎。結果,papa打臉了,寫了半個多小時才出來,面試肯定就掛了。都要哭了,寫一萬遍都不會啊。先用遞迴實現 struct listnode class ...