Re: [問題] linked list的插入、刪除(詳情請入內)

看板C_and_CPP作者 (星空下的鮪魚)時間16年前 (2009/11/01 07:53), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《shieldsky (soarfox)》之銘言: : 大家好!我最近在寫一個C語言linked list的作業, : 但我寫完之後,不論怎樣更改程式碼, : 在輸入一些節點後,選擇刪除掉某些節點,刪除完就會出現一些小問題, : 可能是某個後端節點的值被刪掉後,卻莫名地在最前端多出一個0值, : 或者刪除掉前端節點的值後,前端節點反而變成一個亂數值! : 因為自己已經想了好幾天,也翻過板上的文章與精華區, : 自己手邊唯一一本C語言教學手冊也看了好久,但總是無法修正這些BUG, : 所以才POST到板上,希望能夠獲得解決的辦法,謝謝各位。 : 以下是題目要求: : 1.請使用鏈結串列 (Linked List) 資料型態完成程式。 : 2.使用者可以選擇 1.新增節點 或 2.刪除節點 兩種功能。 : 3.使用者選擇功能後,輸入一數字,必須在串列中找到適當的位置,插入或移除該節點。 : 4.執行功能後將串列完整印出,並回到功能選擇的步驟。 : 開發平台:Windows XP  使用語言:C語言 使用軟體:DEV-C++ version 4.9.9.2 : 有問題的code: : http://nopaste.csie.org/60b0d : 補充說明: : 雖然這個題目的程式碼自己前前後後寫了好幾次才有今日的雛形, : 但總覺得自己還是不太清楚我到底是瞭解linked list的基礎了沒? : 好像常有一種似懂非懂的不確定感在漂浮著,請問有無什麼檢驗自己觀念的方法呢? 我不懂為什麼insert node需要三個…!? 以下是個人的看法: typedef struct node { int data; node* nextNode; ///< 我覺得這樣比較好懂這個link在做什麼 /// 視需要可以加上 node *prevNode; 變成雙向的連結 } NODES; void insertNode(NODES *node, int data) { NODES *newNode = (NODES *)malloc(sizeof(NODES)); newNode->data = data; // 串連起來 newNode->nexeNode = node->nextNode; node->nextNode = newNode; } 這樣的話, 本來是 node---->nextNode 會變成 node---->newNode---->nextNode 那回過頭來看一下你的insertNode1 # /*insertnode1(); function*/ /*新增前端的值*/ NODES* insertnode1(NODES *head,NODES *node,int a) /*node為前端head,a為欲插在head之後的值*/ { NODES *newnode; /*動態配置一個空間給新結點使用*/ newnode=(NODES *)malloc(sizeof(NODES)); newnode->data=a; /*設值給新結點*/ newnode->link=node; /*設定新結點與前端節點的關係*/ head=newnode; /*關鍵coding:"令新節點成為head"*/ return head; /*關鍵coding:"將更改完成的head傳回去;否則,在此設定的head,將只運用於此insertnode1(); function中而已"*/ } 傳入了head, node, 和a 我不清楚head和node之間的關係是怎麼樣,從這邊看來,link會成為 newnode->link = node; 示意圖: newnode---->node---->link head = newnode; 示意圖: 這一行沒有意義…新節點不會因為這樣成為head。 打到這邊… 再看你的註解… 我想你應該回頭去看一下關於pointer那章節的書。 你應該是對pointer的概念還不夠清楚吧。 補記:就如上一篇3F的w大說的,把address print出來看看。 會比較知道發生了什麼事情。 -- 或許人生是一段整合內在的自己 並尋求人間一點真情的過程吧 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.216.118.152 ※ 編輯: aecho 來自: 61.216.118.152 (11/01 07:55)

11/01 08:00, , 1F
程式碼裡有first=insertnode1(head,node,a);
11/01 08:00, 1F

11/01 08:05, , 2F
不過我還沒仔細研究head是什麼就是了
11/01 08:05, 2F

11/01 20:30, , 3F
head其實就是象徵著一個list的開頭,跟first一樣。
11/01 20:30, 3F

11/01 20:32, , 4F
我已經回覆新的文章了,文章代碼(AID): #1AxNnTJN
11/01 20:32, 4F
文章代碼(AID): #1AxCtksy (C_and_CPP)
文章代碼(AID): #1AxCtksy (C_and_CPP)