看板 C_and_CPP 關於我們 聯絡資訊
===========片段程式碼=========== 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
buganini:這時候你就要用雙向link-list 不要懷疑 08/06 12:04
buganini:依據用途自己定結構 有時候還可以看到tree跟link-list 08/06 12:05
VictorTom:其實用 ptr->next->next 硬幹應該也是可以吧XD 08/06 12:05
buganini:並存的東西 就會看到 left, right, next三個 08/06 12:05
buganini:如果你沒有要做random access 把list head留下來就好了 08/06 12:06
buganini:像V大說得那樣一個一個爬過一遍 08/06 12:06
buganini:照你目前的用途 你插入位置的依據是什麼? 08/06 12:08
buganini:index? value? address? 你可以定義插入發生在指定 08/06 12:09
buganini:位置之後 這樣就不會需要往前啊 08/06 12:09
buganini:刪除也是 08/06 12:09
conan77420:我發現是我linklist的觀念有誤,想通就懂b大在說什麼了 08/06 13:07
conan77420:THX 08/06 13:07