鍊錶的反轉

2021-05-23 12:09:28 字數 505 閱讀 2112

鍊錶的反轉是乙個經常被問到的乙個面試題,也是乙個非常基礎的問題。比如乙個鍊錶是這樣的: 1->2->3->4->5 通過反轉後成為5->4->3->2->1。最容易想到的方法遍歷一遍鍊錶,利用乙個輔助指標,儲存遍歷過程中當前指標指向的下乙個元素,然後將當前節點元素的指標反轉後,利用已經儲存的指標往後面繼續遍歷。源**如下:

struct linka ;

void reverse(linka*& head)

head->next = null;

head = pre;

}

還有一種利用遞迴的方法。這種方法的基本思想是在反轉當前節點之前先呼叫遞迴函式反轉後續節點。源**如下。不過這個方法有乙個缺點,就是在反轉後的最後乙個結點會形成乙個環,所以必須將函式的返回的節點的next域置為null。因為要改變head指標,所以我用了引用。演算法的源**如下:

linka* reverse(linka* p,linka*& head)

else

}

鍊錶 反轉鍊錶

問題 兩兩交換鍊錶中的節點 問題 k 個一組翻轉鍊錶 問題鏈結 利用棧先進後出的特性,遍歷鍊錶,將每個結點加入棧中,最後進行出棧操作,先出棧的結點指向臨近的後出棧的結點。definition for singly linked list.struct listnode class solution ...

反轉鍊錶與分組反轉鍊錶

經典的反轉鍊錶,先上 public class listnode public class printlist system.out.println public class reverse public listnode reverse listnode root listnode pre nul...

鍊錶的反轉

1 鍊錶的反轉 原先的鍊錶保留乙個頭結點head 通過該頭結點可以遍歷鍊錶的每乙個結點裡內容,如果在鍊錶遍歷的過程中,再用兩個指標把把煉表裡的內容指標的指向改變,使原先指向下乙個節點的,改為指向它的前乙個節點,就可以實現鍊錶的反轉了!include include struct llist int ...