[問題] linklist 插入的問題

看板C_and_CPP (C/C++)作者 (小馬非馬)時間16年前 (2009/08/06 11:51), 編輯推噓2(2010)
留言12則, 3人參與, 最新討論串1/1
===========片段程式碼=========== struct node { int data; node *pnext; }; node *phead=0; void insert(int data) { node *pnode=new node; pnode->data=data; pnode->pnext=0; if(phead==0) {phead=pnode;} else { node *plast=phead; while(plast->pnext!=0) {plast=plast->pnext;} plast->pnext=pnode; } } =================================== 以上是我的 創造單向linklist 但我讀到書上說的插入新的節點或刪除就有點問題 假設現在linklist是 phead -> 1 -> 2 -> 3 -> null 照理說要刪除2的寫法是 1->pnext=2->pnext; 然後再釋放2的記憶體即可 而要插入新的linklist 假設linklist是 phead -> P -> Q -> null 新的記憶體叫做R要插入P跟Q中間 寫法是 R->pnext=P->pnext; R=P->pnext; ================================ 但我的問題是像我的程式這樣寫 要怎麼去選定"已經被創造出來的記憶體" linklist不像stack有名字可以很輕鬆的給變數來當名字 就算我用新宣告的 pnode 跟 plast 去當輔助,指記憶體位置 但要怎麼寫 才能指名我要第N個記憶體位置的pnext,用他來改變指到的記憶體 感覺就像我想寫: blablabla = (plast->pnext)->pnext; 簡單來說我的問題就是 怎麼去使用之前的pnext? =================================== -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.229.132.171

08/06 12:04, , 1F
這時候你就要用雙向link-list 不要懷疑
08/06 12:04, 1F

08/06 12:05, , 2F
依據用途自己定結構 有時候還可以看到tree跟link-list
08/06 12:05, 2F

08/06 12:05, , 3F
其實用 ptr->next->next 硬幹應該也是可以吧XD
08/06 12:05, 3F

08/06 12:05, , 4F
並存的東西 就會看到 left, right, next三個
08/06 12:05, 4F

08/06 12:06, , 5F
如果你沒有要做random access 把list head留下來就好了
08/06 12:06, 5F

08/06 12:06, , 6F
像V大說得那樣一個一個爬過一遍
08/06 12:06, 6F

08/06 12:08, , 7F
照你目前的用途 你插入位置的依據是什麼?
08/06 12:08, 7F

08/06 12:09, , 8F
index? value? address? 你可以定義插入發生在指定
08/06 12:09, 8F

08/06 12:09, , 9F
位置之後 這樣就不會需要往前啊
08/06 12:09, 9F

08/06 12:09, , 10F
刪除也是
08/06 12:09, 10F

08/06 13:07, , 11F
我發現是我linklist的觀念有誤,想通就懂b大在說什麼了
08/06 13:07, 11F

08/06 13:07, , 12F
THX
08/06 13:07, 12F
文章代碼(AID): #1AUbCaSW (C_and_CPP)
文章代碼(AID): #1AUbCaSW (C_and_CPP)