Re: [問題] linked list的插入、刪除(問題已解決)

看板C_and_CPP作者 (soarfox)時間14年前 (2009/11/01 20:17), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
※ 引述《aecho (星空下的鮪魚)》之銘言: : 我不懂為什麼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->nextNode = node->nextNode; : node->nextNode = newNode; : } : 這樣的話, : 本來是 node---->nextNode 會變成 : node---->newNode---->nextNode 謝謝aecho網友特地回文討論。 不過我可能是因為用link這個字用習慣了,一時要轉成nextNode還真是有點轉不過來! 剛剛看了好久之後才懂,一直以為nextNode是一個節點……後來才發現是個指標! XD : 那回過頭來看一下你的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 您的示意圖跟我想的不太一樣噎!我的link是struct中的成員之一, 程式碼:newnode->link=node; 意思是說把newnode連結到node。 所以此行程式碼我個人的示意圖是:newnode---->node 其實head從頭到尾都象徵著一個list的開頭喔! 而node則是象徵著用searchnode();函數找到的點, 拿插在前端節點之前來說:把"想找的點(head->data)"傳入searchnode();函數中, 使searchnode();函數去run,如果找到和我們想找的點(head->data)數值為相同者, 則回報到main function中,且此點由指標node來接收, 所以程式碼為:node=searchnode(first,head->data); 而first同樣象徵著一個list的開頭喔! : head = newnode; : 示意圖: 這一行沒有意義…新節點不會因為這樣成為head。 因為newnode為一個插在list前端節點(node)之前的節點, 所以要令一個list中的起頭由node更改為由newnode開始,故head = newnode; : 打到這邊… 再看你的註解… : 我想你應該回頭去看一下關於pointer那章節的書。 : 你應該是對pointer的概念還不夠清楚吧。 : 補記:就如上一篇3F的w大說的,把address print出來看看。 : 會比較知道發生了什麼事情。 謝謝所有有回覆、推文的網友們,我會再去把書拿出來仔細詳讀一番的, 不過我今天早上到中午一直在修改此程式,到下午時已經修改好了, 目前當初那些小問題應該都已經消失or被避免掉了,而我也把coding加入更詳細的註解, 有些小地方也有修改過了,煩請各位網友如有興趣,可以前往觀看喔!謝謝各位。 新程式碼:http://nopaste.csie.org/ffa44 有任何問題歡迎找我討論。 :) -- 整個程式都是我的咖啡館, my coding, my caf'e. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.41.168.55 ※ 編輯: shieldsky 來自: 114.41.168.55 (11/01 20:18) ※ 編輯: shieldsky 來自: 114.41.168.55 (11/01 20:19)
文章代碼(AID): #1AxNnTJN (C_and_CPP)