尼采的笔 2022-11-09 13:04 采纳率: 100%
浏览 155
已结题

一道关于c语言链表的问题

请问哪位可以解答一下这个问题。

【问题描述】
输入n(n>1)个正整数,每次将输入的整数插入链表的头部。-1表示输入结束。再输入一个正整数,在链表中查找该数据并删除对应的结点。要求输出删除结点后链表所有结点中的数据。
【输入形式】
输入以空格分隔的n个整数,以-1结束输入,再输入一个要删除的整数。
【输出形式】
从链表第一个结点开始,输出链表所有结点中的数据,以空格分隔。
【样例输入】
2 4 6 7 8 4 -1
2
【样例输出】
4 8 7 6 4
【样例说明】
输入以空格分隔的n个整数2 4 6 7 8 4,以-1结束输入,然后输入2,删除2之后,输出剩余整数。

#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct list)

struct list {

int num;

struct list *next;

};

int n;

struct list *create(void) {

struct list *head;

struct list *p1,*p2;

n=0;

p1=p2= (1) ;

scanf("%d",&p1->num);

head=NULL;

while (p1->num!=-1) {

   n++;

   if (n == 1)

       head=p1;

  else2)      ;

  p2=p1;

  p1=(struct list *)malloc(LEN);

  scanf("%d",&p1->num);

}

p2->next=NULL;

return head;

}

struct list *delnode(struct list *h,int x) {

struct list *head,*p,*q;

head=(struct list *)malloc(LEN);

head->next=h;

p=head->next;

q=head;

while (p!=NULL) {

   if (p->num == x) {

                (3;

       free(p);

       p=q->next;

   }

   else {

       q=p;

       p=p->next;

   }

}

q=head;

head=head->next;

4;

return head;

}

void print(struct list *head) {

int tmp[20];

int i,j;

struct list *p;

p=head;

if (head != NULL)

{

   i = 0;

   while (p != NULL){

       tmp[i++] = p->num;

       p = p->next;

    }

   for (j=i-1;j>=0;j--)

           printf("%d ",tmp[j]);

}

}

int main() {

struct list *head;

int x;

head= (5) ;

scanf("%d",&x);

head=delnode(head,x);

print(head);

return 0;

}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-11-09 13:29
    关注

    修改如下,供参考:

    #include <stdio.h>
    #include <malloc.h>
    #define LEN sizeof(struct list)
    struct list {
    
        int    num;
        struct list* next;
    };
    
    int n;
    
    struct list* create(void) {
    
        struct list* head;
        struct list* p1, * p2;
        n = 0;
        p1 = p2 = (struct list*)malloc(LEN); //(1);
        scanf("%d", &p1->num);
        head = NULL;
        while (p1->num != -1) {
    
            n++;
            if (n == 1)
                head = p1;
            else
                p2->next = p1; //(2);
            p2 = p1;
            p1 = (struct list*)malloc(LEN);
            scanf("%d", &p1->num);
        }
        p2->next = NULL;
        return head;
    
    }
    
    struct list* delnode(struct list* h, int x) {
    
        struct list* head, * p, * q;
        head = (struct list*)malloc(LEN);
        head->next = h;
        p = head->next;
        q = head;
        while (p != NULL) {
    
            if (p->num == x) {
                q->next = p->next;//(3);
                free(p);
                p = q->next;
            }
            else {
                q = p;
                p = p->next;
            }
        }
        q = head;
        head = head->next;
        free(q);  //(4);
        return head;
    }
    
    void print(struct list* head) {
    
        int tmp[20];
        int i, j;
        struct list* p;
        p = head;
        if (head != NULL)
        {
            i = 0;
            while (p != NULL) {
                tmp[i++] = p->num;
                p = p->next;
            }
            for (j = i - 1; j >= 0; j--)
                printf("%d ", tmp[j]);
        }
    }
    
    int main() {
        struct list* head;
        int x;
        head = create(); //(5);
        scanf("%d", &x);
        head = delnode(head, x);
        print(head);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月17日
  • 已采纳回答 11月9日
  • 创建了问题 11月9日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助