[問題] linked list輸出的小小問題..

看板C_and_CPP (C/C++)作者 (ミⒼⓏ❼❾)時間15年前 (2010/08/06 22:02), 編輯推噓0(0011)
留言11則, 2人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 我想請問一下,我的程式到哪邊邏輯寫錯啊>_< 為啥輸入項數是3,卻要輸入4個數字(ex多輸入5),而且 為啥第一個會跑出0出來 看了蠻久了= =" 找不出到底哪兒 錯了... 所以上來po文 請教大大們 謝謝 程式跑出來的錯誤結果: 請輸入要插入的項數3 2 3 6 5 0 2 3 6 請按任意鍵繼續 . . . 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) DEV-C++ 有問題的code: (請善用置底文標色功能) #include<stdio.h> #include<stdlib.h> typedef struct ListNode{ int data; struct ListNode *link; }NodePtr; void CreatNode(NodePtr **p,int n) { NodePtr *head, *tail; head=tail=(NodePtr*)malloc(sizeof(NodePtr)); int i; for(i=0; i<n; i++) { tail->link=(NodePtr*)malloc(sizeof(NodePtr)); tail=tail->link; scanf("%d ",&(tail->data)); } tail->link=NULL; *p=head; head=head->link; //free(p); } void PrintList(NodePtr *p1) { while(p1 != NULL){ printf("%d ",(p1->data)); p1=p1->link; } } void FreeList(NodePtr *p2) { NodePtr *pNext=NULL; while(p2 != NULL){ pNext=p2->link; free(p2); p2=pNext; } } int main() { NodePtr *p=NULL; printf("請輸入要插入的項數"); int n; scanf("%d",&n); CreatNode(&p,n); PrintList(p); FreeList(p); system("pause"); return 0; } 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.171.62.247

08/06 22:22, , 1F
多印一個數字, 原因在這兩行有錯: *p=head;
08/06 22:22, 1F

08/06 22:23, , 2F
head=head->link;
08/06 22:23, 2F

08/06 22:30, , 3F
scanf("%d",&(tail->data)); ←格式字串內不要加空白
08/06 22:30, 3F
那二行改成 head=head->link; *p=head; 結果就正確了耶,因為PrintList那邊是用p去print的... 之前的寫法多一個首節點,所以印出來是會多一個 0 ....不知這樣的解釋對不對>_< ※ 編輯: GZ79 來自: 218.171.62.247 (08/06 22:46)

08/06 22:48, , 4F
對了 我想問大大 我的釋放node的code 寫的對不對啊..><
08/06 22:48, 4F

08/06 22:48, , 5F
我是寫成 *p = head -> link; free( head );
08/06 22:48, 5F

08/06 22:48, , 6F
釋放的地方沒問題
08/06 22:48, 6F

08/06 22:48, , 7F
應該有釋放正確吧...= =
08/06 22:48, 7F

08/06 22:50, , 8F
你把那兩行換掉雖然回傳了第二個節點的位置, 不過第一
08/06 22:50, 8F

08/06 22:51, , 9F
個節點還是在, 有點浪費空間
08/06 22:51, 9F

08/06 22:54, , 10F
對,沒錯,我剛剛才發現>_< 大大的用法 剛好消掉第一個node
08/06 22:54, 10F

08/06 22:55, , 11F
非常謝謝l大的解惑 ^_^
08/06 22:55, 11F
文章代碼(AID): #1CN1N_tE (C_and_CPP)
文章代碼(AID): #1CN1N_tE (C_and_CPP)