YXTS122 2015-11-09 23:14 采纳率: 100%
浏览 1447
已采纳

这结果怎么显示链表越来越短,在代码中从哪看出来的?

 #include<stdio.h>
#include<stdlib.h>
typedef struct list
{
    int data;
    struct list *next;
}SLIST;
void fun(SLIST *p)
{
    SLIST  *t, *s;
    t=p->next;    s=p;
    while(t->next != NULL)
    {
        s=t;
        t=t->next;
    }
    printf(" %d ",t->data);
    s->next=NULL;
    free(t);
}
SLIST *creatlist(int  *a)
{
    SLIST *h,*p,*q;      int  i;
    h=p=(SLIST*)malloc(sizeof(SLIST));
    for(i=0;i<8;i++)
    {
        q=(SLIST*)malloc(sizeof(SLIST));
        q->data=a[i];  p->next=q;  p=q;
    }
    p->next=NULL;
    return h;
}
void outlist(SLIST  *h)
{
    SLIST *p;
    p=h->next;
    if(p==NULL)
        printf("\nThe list is NULL!\n");
    else
    {
        printf("\nHead");
        do 
        { 
           printf("->%d",p->data);  p=p->next;  
        } 
        while(p!=NULL);
        printf("->End\n");
    }
}
void main()
{
    SLIST  *head;
    int  a[8]={11,12,15,18,19,22,25,29};
    head=creatlist(a);
    printf("\nOutput from head:\n");  outlist(head);
    printf("\nOutput from tail: \n");
    while (head->next != NULL)
    {
        fun(head);
        printf("\n\n"); printf("\nOutput from head again :\n");  
        outlist(head);
    }
}

图片说明

  • 写回答

1条回答 默认 最新

  • ysuwood 2015-11-10 01:04
    关注

    fun函数每次删掉最后一个节点。

    
     void fun(SLIST *p)
    {
        SLIST  *t, *s;
        t=p->next;    s=p;
        while(t->next != NULL)
        {
            s=t;
            t=t->next;
        }
        printf(" %d ",t->data);
        s->next=NULL;//置为NULL,标志s为末尾
        free(t);//释放原来的末尾
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?
  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件