作者anoymouse (没有昵称)
看板C_and_CPP
标题[问题] link list 加节点在开头
时间Thu Dec 3 17:29:11 2015
#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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1449134954.A.06B.html
1F:→ james1022jk: void addbeg(NODE*& head, int item) 12/03 18:17
2F:→ anoymouse: & 不是c++参考吗 12/03 18:27
3F:→ james1022jk: 你是c的话...就要再改一下了 12/03 18:27
4F:→ anoymouse: 摁 我这是看youtube的印度人写的 可是不知道为啥错 12/03 18:29
6F:→ anoymouse: 他的start是我的head 只不过他的start是全域的 12/03 18:30
7F:→ anoymouse: 所以他每次都不用把start传进函式 12/03 18:31
8F:→ anoymouse: 我把要传进去函式的地方通通改成不用了 就可以 12/03 18:44
9F:→ anoymouse: 难到指标不能在函式里面重新指定? 12/03 19:25
10F:推 overhead: C的话此情况要用双重指标* 12/03 20:09
11F:→ stupid0319: 个人认为typedef struct node *NODE 这样写比较合适 12/03 20:10
12F:→ james1022jk: youtube里头的跟楼上的宣告是一样的,刚忘记讲= = 12/03 20:13
13F:推 overhead: 以你目前写法,你等於是以传值方式将指标复制进addbeg, 12/03 20:14
14F:→ overhead: 这跟传个int结果在func里改不了的原理一样 12/03 20:14
15F:→ stupid0319: link要双向的话,应当加一个 node* pre;指向上一个的 12/03 20:15
16F:→ overhead: 举例: 将int a用&a传入func可改a值,但int *b用b传入是 12/03 20:20
17F:→ overhead: 改不了b值,因为逻辑上跟int c用c传入改不了c值一样 12/03 20:20
18F:→ overhead: 如果是int *d,你要用func(int **pd)把d用&d的方式传入 12/03 20:22
19F:→ overhead: 才能改d值 12/03 20:23
20F:→ anoymouse: 了解 谢谢! 12/03 22:04
21F:推 IhateOGC: malloc 12/04 00:42