看板 C_and_CPP 關於我們 聯絡資訊
#include <stdio.h> #include <stdlib.h> typedef struct node { int data ; struct node *next; } NODE; void addend(NODE*,int); void addbeg(NODE*,int); void display(NODE*); NODE* _getnode(); int main(int argc, char *argv[]) { int item=100; NODE* a = _getnode(); NODE* b = _getnode(); NODE* c=_getnode(); a->next=NULL; b->next=NULL; c->next=NULL; printf("a's data:"); scanf("%d",&(a->data)); printf("\nb's data:"); scanf("%d",&(b->data)); printf("\nc's data:"); scanf("%d",&(c->data)); a->next=b; b->next=c; display(a); printf("\n"); addbeg(a,7889); /*NODE* newnode= _getnode(); newnode->data=7889; newnode->next=a; a=newnode;*/ display(a); //addend(a,500); //display(a); system("pause"); return 0; } void display(NODE* head) { NODE* ptr; ptr=head; if(head==NULL) { printf("its empty"); return; } while(ptr!=NULL) { printf("%d\n",ptr->data); ptr=ptr->next; } } NODE* _getnode() { return((NODE*)malloc(sizeof(NODE)) ) ; } void addend (NODE* head,int item ) { NODE* ptr; ptr=head; while(ptr->next!=NULL) { ptr=ptr->next; } NODE* newnode=_getnode(); newnode->data=item; newnode->next=NULL; ptr->next=newnode; } void addbeg (NODE* head,int item ) { NODE* newnode= _getnode(); newnode->data=item; newnode->next=head; head=newnode; } 用函式addend 把新節點加到list的尾端可以 但是不能用函式addbeg把新節點加入到list的開頭 執行時跑不出7899 請問哪裡有錯誤? 但如果直接在主程式把新節點放到list開頭就可以 執行時有7899 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.169.176.162 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1449134954.A.06B.html
james1022jk: void addbeg(NODE*& head, int item) 12/03 18:17
anoymouse: & 不是c++參考嗎 12/03 18:27
james1022jk: 你是c的話...就要再改一下了 12/03 18:27
anoymouse: 摁 我這是看youtube的印度人寫的 可是不知道為啥錯 12/03 18:29
anoymouse: 他的start是我的head 只不過他的start是全域的 12/03 18:30
anoymouse: 所以他每次都不用把start傳進函式 12/03 18:31
anoymouse: 我把要傳進去函式的地方通通改成不用了 就可以 12/03 18:44
anoymouse: 難到指標不能在函式裡面重新指定? 12/03 19:25
overhead: C的話此情況要用雙重指標* 12/03 20:09
stupid0319: 個人認為typedef struct node *NODE 這樣寫比較合適 12/03 20:10
james1022jk: youtube裡頭的跟樓上的宣告是一樣的,剛忘記講= = 12/03 20:13
overhead: 以你目前寫法,你等於是以傳值方式將指標複製進addbeg, 12/03 20:14
overhead: 這跟傳個int結果在func裡改不了的原理一樣 12/03 20:14
stupid0319: link要雙向的話,應當加一個 node* pre;指向上一個的 12/03 20:15
overhead: 舉例: 將int a用&a傳入func可改a值,但int *b用b傳入是 12/03 20:20
overhead: 改不了b值,因為邏輯上跟int c用c傳入改不了c值一樣 12/03 20:20
overhead: 如果是int *d,你要用func(int **pd)把d用&d的方式傳入 12/03 20:22
overhead: 才能改d值 12/03 20:23
anoymouse: 了解 謝謝! 12/03 22:04
IhateOGC: malloc 12/04 00:42