作者conan77420 (小馬非馬)
看板C_and_CPP
標題[問題] linklist 插入的問題
時間Thu Aug 6 11:50:57 2009
===========片段程式碼===========
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