问下c语言链表的问题 前面结构体里定义的指针和函数里定义的结构体指针有什么不同,看了n久了,还是看 100

问下c语言链表的问题前面结构体里定义的指针和函数里定义的结构体指针有什么不同,看了n久了,还是看不明白链表,都有点怀疑自己的智商了!求前辈列出一个简单的链表给我讲解一下呗... 问下c语言链表的问题
前面结构体里定义的指针和函数里定义的结构体指针有什么不同,看了n久了,还是看不明白链表,都有点怀疑自己的智商了!求前辈列出一个简单的链表给我讲解一下呗
展开
 我来答
kaixingui2012
2015-03-25 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6464万
展开全部
以下代码是一个链表的逆置操作代码,供参考
#include<stdio.h>
#include <stdlib.h>

struct node {
    int n;  //结点中的数据
    struct node *next ; //指向后继结点的指针
} *list=NULL; //表头,初值NULL,表示空表
void createList() //建立链表
{
    struct node *p; //临时结点指针
    int i;
    
    for( i=5;i>0;i-- )
{
p=(struct node *) malloc( sizeof(struct node) ); //申请一个结点
p->n=i; //数据赋值
//以下两句,实现头插法建立链表
p->next=list; //把新结点p装在表头前
list=p ;  //p成为新的表头
}
}
void showList()
{
struct node *p=list;
while( p)
    {
printf("%d ", p->n );
p=p->next;
    }
printf("\n");
}

void reverseList()
{
    struct node *p=NULL,*h=list,*t;

    while(h)
{
t=h; //分离出一个结点
h=h->next; //h指向后续的部分,保持原表不丢失

t->next=p; //头插法
p=t; 
}
list=p;//表头指针赋值
}

int main()
{
printf("link:\n");
createList(); //建表
showList(); //显示表
reverseList(); //逆置
showList(); //再显示
return 0;
}
追问
结构体里的那个指向下个节点的指针是怎么指向的
追答
首先:指针,通常是指指针变量,这是一种用来存储内存地址的变量!而内存地址值是个整数,所以,指针变量中存储的就是个整数,通常我们会用赋值操作符(等号)来对其赋值。

p->next=list; //把新结点p装在表头前 p结点的后继指针变量中存储list的值,而list中存的是当前表的首地址! 这样一句,就把p和list表串在了一起。

假设list是一串气球, p是一个单独的气球, 上面的操作,就是把p这个气球绑在了list这个气球串的第一个球的前面,形成了一个新的气球串。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式