連結串列逆序C++
阿新 • • 發佈:2019-01-14
題目:將給定連結串列逆序,返回逆序後的連結串列頭。
思路:建立三個指標,一個執行當前節點,一個指向前節點,一個指向後節點。由於挺簡單,直接程式碼就能看明白。
程式碼:
#include <stdio.h> class linklist { public: linklist(int tmp) :value(tmp) {} class linklist *link; int value; }; /* create list */ linklist *create_list(linklist *head) { int tmp; linklist *p = NULL; for(int i = 0; i < 5; i++) { p = new linklist(i); if (p != NULL) { p->link = head; head = p; } } return head; } /* reverse list */ linklist *reverselist(linklist *list) { linklist *Pnode = list; linklist *Pprenode = NULL; linklist *Pnextnode = NULL; while(Pnode != NULL) { Pnextnode = Pnode->link; if(Pnextnode == NULL) { Pnode->link = Pprenode; return Pnode; } else { Pnode->link = Pprenode; Pprenode = Pnode; Pnode = Pnextnode; } } return Pnode; } int main(int argc, char *argv[]) { linklist *PoldListHead = create_list(NULL); linklist *Ptmp = PoldListHead; while(Ptmp != NULL) { printf("value is :%d\n\n", Ptmp->value); Ptmp = Ptmp->link; } linklist *PnewListHead = reverselist(PoldListHead); Ptmp = PnewListHead; while(Ptmp != NULL) { printf("reverse value is :%d\n", Ptmp->value); Ptmp = Ptmp->link; } }
當然欄位程式碼寫給面試官,還不ok。有比較嚴重的問題,面試官肯定能發現,就意味著多半無緣了。其實很簡單,就是記憶體沒有釋放的問題,有了new就一定要有delete,記住。