怎么把这种链表程序补充完整啊?

本程序从键盘读入整数,并按从大到小的顺序输出输入正整数中互不相等的那些整数。程序以便读入整数,以便构造一个从大到 小顺序链接的的链表,直至不能从键盘读入整数,然后顺序输出链表上各节点的整数值。主函数每读入一个整数,就调用函数insert(),函数in sert()将还未出现杂链表上的正数按从大到小的顺序插如到链表中。 为了插入方便,链表杂表首有一个辅助节点。
#include <studio. h>
#include
typedef struct node{ int val; struct node *next; }NODE;
void insert(NODE *list,int x){
NODE *u,*v,*p;
u=list;v=u->nest;
while((1)&&xval) /寻找插入位置/
{u=v;v=v->nest;}
if(v==NULL|| (2) ){ /判是否要插入新节点/
p=(NODE *)malloc(sizeof(NODE));
p->val=x; /生成新节点/
(3) =v;
(4) =p; /插入新节点/ } }
mian(){ int x; NODE *head,p; /首先建立只有辅助节点的空链表/
head=(NODE
)malloc(sizeof(NODE));
(5) =NULL;
printf("Enter integers:\n");
while(scanf("%d",&x)==1) /反复读入整数插入链表/
insert(head,x);
for(p=head->next;p!->NULL;p=p->next)
printf("%d\t", p->val); }
[问题] 1、写出上面带标号1-5的括号中该填入的内容;
2、写一个函数Sum,求以上链表中所有整数之和
3、写一个函数Destory,将以上链表所占的内存释放。

代码补充并完善如下:


#include <stdio.h>
#include <malloc.h>
typedef struct node { int val; struct node* next; }NODE;
void insert(NODE* list, int x) {
    NODE* u, * v, * p;
    u = list; 
    v = u->next;
    while ( v!=NULL && x < v->val) /* 寻找插入位置 */  //(1)
    {
        u = v; 
        v = v->next; 
    }
    if (v == NULL || x > v->val ) {  //(2)
        /* 判是否要插入新节点 */
        p = (NODE*)malloc(sizeof(NODE));
        p->val = x; /* 生成新节点 */
        p->next = v;  //(3)
        u->next = p; /* 插入新节点*/ //(4)
    }
}
// 求以上链表中所有整数之和
int Sum(NODE* head)
{
    NODE* p = 0;
    int s = 0;
    if (head == NULL) return 0;
    p = head->next;
    while (p != NULL)
    {
        s += p->val;
        p = p->next;
    }
    return s;
}
// 将以上链表所占的内存释放
void Destory(NODE** head)
{
    NODE* p;
    while (*head)
    {
        p = (*head)->next;
        free(*head);
        *head = p;
    }
    *head = 0;
}
int main() 
{
    int x; NODE* head, *p; /* 首先建立只有辅助节点的空链表 */
    head = (NODE*)malloc(sizeof(NODE));
    head->next = NULL; //(5)
    printf("Enter integers:\n");
    while (scanf("%d", &x) == 1) /* 反复读入整数插入链表 */
        insert(head, x);
    for (p = head->next; p!=NULL; p = p->next)
        printf("%d\t", p->val);

    //求链表的和
    printf("\nSum=%d\n", Sum(head));
    //释放链表内存
    Destory(&head);
    return 0;
}




5肯定是head->next = NULL吧
你贴的代码怎么这么乱啊


typedef struct node{ int val; struct node *next; }NODE;
void insert(NODE *list,int x)
{
    NODE *u,*v,*p;
    u=list;v=u->next;
    while(v != NULL &&x < v->val) /*寻找插入位置*/
    {u=v;v=v->next;}
    if(v==NULL|| x>= v->val )
    { /*判是否要插入新节点*/
        p=(NODE *)malloc(sizeof(NODE));
        p->val=x; /*生成新节点*/
        p->next =v;
        u->next =p; /*插入新节点*/ 
    } 
}
int main()
{
    int x; NODE *head,*p; /*首先建立只有辅助节点的空链表*/
    head=(NODE*)malloc(sizeof(NODE));
    head->next =NULL;
    printf("Enter integers:\n");
    while(scanf("%d",&x)==1) /*反复读入整数插入链表*/
        insert(head,x);
    for(p=head->next;p!=NULL;p=p->next)
        printf("%d\t", p->val); 
}

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632