兩種思路:第一種方法,設有新舊兩個鍊錶,新煉表為要求反轉後的鍊錶,初始值為null,舊煉表為原鍊錶。每次舊煉表上取乙個結點放在新鍊錶的表頭,直到舊煉表取完,重新設定表頭,則新鍊錶就是反序的。
簡單演示一下:null, l->1->2->3->4->5…
第一步之後變成:l, null<-1, 2->3->4->5…
第二部:l, null<-1<-2, 3->4->5…
直到最後,把l指向新的表頭。
**如下:
void reverselinkedlist(linkedlist* l)
l->pnext = prev; //鍊錶指向頭結點
}
第二種方法:每次把結點放到首結點的位置,選取的結點總是原煉表首結點後面的乙個結點。
同樣以上面的例子為例:l->1->2->3->4->5->…->null
第一步之後:l->2->1->3->4->5->…->null
第二步之後:l->3->2->1->4->5->…->null
注意總是把原煉表首結點1後面的結點提到首結點位置。**如下:
void reverselinkedlist1(linkedlist* l)
}
測試**:
#include using namespace std;
struct linkedlist;
linkedlist* init()
void insert2tail(linkedlist *l, int num)
void print(linkedlist* l)
cout << endl;
}void reverselinkedlist(linkedlist* l)
l->pnext = prev; //鍊錶指向頭結點
}void reverselinkedlist1(linkedlist* l)
}int main()
鍊錶 反轉鍊錶
問題 兩兩交換鍊錶中的節點 問題 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 2 3 4 5 通過反轉後成為5 4 3 2 1。最容易想到的方法遍歷一遍鍊錶,利用乙個輔助指標,儲存遍歷過程中當前指標指向的下乙個元素,然後將當前節點元素的指標反轉後,利用已經儲存的指標往後面繼續遍歷。源 如...