C语言中,头指针head,和head->next分别是什么?

来源:百度知道 编辑:UC知道 时间:2024/09/21 13:29:00
我是这样理解的:head是指向链表的一个节点,那么head->next就是第一个节点的指针域.如果另外的指针p,p=head;和p=head->next;分别表示什么?

我认为p=head;它指向了链表里的起一个节点(存的是第一个节点的地址);
p=head->next;它指向了链表里的起二个节点(存的是第二个节点的地址);
我这样理解对么?

因为做链表逆置的时候,有的时候写的是p=head;有的时候写的是p=head->next;,实在是很糊涂
NODE*creatlist(int a[ ])//建立链表
{ NODE *h,*p,*q; int i;
h=(NODE*)malloc(sizeof(NODE));
h->next=NULL;
for(i=0;i<N;i++)
{ q=(NODE*)malloc(sizeof(NODE));
q->data=a[i];
q->next=NULL;
if(h->next==NULL) h->next=p=q;//如果这里是h=p=q,两种情况建完以后有什么区别????
else { p->next=q; p=q; } }
return h; }

很简单,head=p是把p的地址直接赋给head,而p=head->next是把head中的指针域即下一个节点的地址赋给head,你记住一点,next中存放的是下一个节点的地址,->是访问next的符号

“if(h->next==NULL) h->next=p=q;//如果这里是h=p=q,两种情况建完以后有什么区别???? ”对于这个问题,h->next=p=q和h=p=q是截然不同的,h->next=p=q是指把p和q中存放的地址赋给h的next域而不是赋给h,而h=p=q是指把p和q中存放的地址赋给h,

头指针head可以指向一个没有数据域的结点,也可以指向第一个结点。

应该是对的!next就是指向后继结点的指针嘛!
其实,只要在做指针修改的时候认真一点儿,链表的问题也不是很复杂!

这都是在链表当中使用的变量:
1、头插法:例如输入a,b,c(下面两块分别表示数据域和指针域,^代表NULL)
head-->c next--->b next---->a ^
实现语句(无头结点)
head=NULL
while(循环条件)
{
s= new 定义的结构体名称;(c中用malloc)
s->next=head;
head=s;
}
头插入法的输出顺序与你的输入顺序相反
2、尾插法:(无头结点)
head->a next->b next->c ^
实现:
head=NULL;
rear=head;
while(循环条件)
{
s=new 结构体名;
if(head==NULL)
head=s;
else
rear->next=s;
rear=s;
}
rear->next=NULL
头插入法的输出顺序与你的输入顺序相同

楼主你要清楚一点,对于一个单链表,一定要有一个头结点,而头结点里是什么也不放的(清华的书和北航的书都是这么写的)