标题:萌新求助链表题
只看楼主
ItAchi7
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-12-31
结帖率:0
已结贴  问题点数:5 回复次数:1 
萌新求助链表题
#include "stdio.h"  
#include "stdlib.h"  
  
struct node  
{   int  data;  
    struct node * next;  
} ;  
  
typedef struct node NODE;  
typedef struct node * PNODE;  
  
void outlist( PNODE );  
  
int main ( )  
{       int num=1;  
    PNODE head;  
  
    head = (PNODE)malloc( sizeof(NODE) );  
    head->next = NULL;  
    head->data = -1;  
  
    while ( num!=0 )  
    {   scanf("%d", &num);  
        if ( num!=0 )  
            ins_list( head, num);  
    }  
  
    outlist( head );  
    return 0;  
}  
  
void outlist( PNODE head )  
{   PNODE p;  
    p = head->next;  
    while ( p != NULL )  
    {   printf("%d\n", p->data);  
        p = p->next;  
    }  
}  
  
/* This is an example for list. Please programme your code like it.
 
ins_list( PNODE h, int num )
{
    .....
}
*/  
  
/* PRESET CODE END - NEVER TOUCH CODE ABOVE */  



请问这个要求写一个ins_list函数
答案如下
ins_list( PNODE h,int num)     
{     
    PNODE p,z;     
    p=(PNODE)malloc(sizeof(NODE));     
    z=(PNODE)malloc(sizeof(NODE));     
    p=h;     
    while (p->next!=NULL)     
    {     
        p=p->next;     
    }     
    z->next=p->next;     
    p->next=z;     
    z->data=num;     
}  
能不能帮助我理解一下这个函数。。自学看不懂
搜索更多相关主题的帖子: node int next num head 
2018-12-31 19:53
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:5 
ins_list( PNODE h,int num)     
{     
    PNODE p,z;//声明结构体变量p,z     
    p=(PNODE)malloc(sizeof(NODE));//为结构体变量p申请空间     
    z=(PNODE)malloc(sizeof(NODE));//...     
    p=h;//这个是把h的值赋值给p,不太理解为啥申请了空间又把地址刷新     
    while (p->next!=NULL)// 这里p首次进入循环代表了入参h,也就是头结点或者首元结点     
    {     
        p=p->next;//随着地址的覆盖p从当前结点刷新到了下一个结点,直到p的next属性为NULL跳出循环
    }     
    z->next=p->next;//这个表示呢,z的结点指向p的下一个结点
    p->next=z; //这个呢,表示p指向z
    z->data=num;//这个呢,表示z的data属性赋值为num     
}  
总体来说,这个是尾插法链表添加的操作,不过p的申请空间行为应该是没有必要的。因为p=h会覆盖p

最后一段可以这么理解
1.z->next=p->next;//这个表示呢,z的结点指向p的下一个结点
   z
    \
p - NULL
2.p->next=z; //这个呢,表示p指向z
   z
  /  \
p     NULL

嗯,大概就是这样,不到之处欢迎指正

剑栈风樯各苦辛,别时冰雪到时春
2018-12-31 22:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492434-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.079651 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved