单链表的顺序建立与结点的删除(期末题复现)

输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。分别输出建立的初始单链表和完成删除后的单链表,以及链表的长度。

函数接口定义:

复制代码
struct node* create(int n);

顺序建立一个带头结点的单链表。其中,n 为读入数据的数目。函数须返回单链表的头节点。

复制代码
void delete(struct node *h,int x);

从单链表删除结点。其中,h 为单链表的头节点,x为删除结点的值。函数不需返回。

复制代码
void print(struct node* h);

输出链表。其中,h 为单链表的头节点。函数不需返回。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。例如:

复制代码
#include<stdio.h>

#include<stdlib.h>



struct node{

int data;

struct node *next;

};

int n,m;



struct node* create(int n);

void delete(struct node *h,int x);

void print(struct node* h);



int main(){

struct node *h;

scanf("%d",&n);

h=create(n);

scanf("%d",&m);

printf("%d\n",n);

print(h);

delete(h,m);

printf("%d\n",n);

print(h);

return 0;

}

/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。

第一行是输入数据的数目;

第二行是建立链表的输入数据;

第三行是删除结点的值。

例如:

复制代码
10

56 25 12 33 66 54 7 12 33 12

12

输出样例:

在这里给出相应的输出。

第一行输出建立链表后的链表长度;

第二行输出初始单链表;

第三行输出完成删除后的链表长度;

第四行输出完成删除后的单链表;

例如:

复制代码
10

56 25 12 33 66 54 7 12 33 12

7

56 25 33 66 54 7 33

答案:

复制代码
struct node* create(int n){
    struct node *head,*tail,*p;
    head=(struct node *)malloc(sizeof(struct node));
    head->next =NULL;
    tail =head;
    for(int i=0;i<n;i++){
        int x;
        scanf("%d",&x);
        p=(struct  node*)malloc(sizeof(struct node));
        p->data=x;
        p->next=NULL;
        tail->next=p;
        tail=p;
    }
    return head;
}
void delete(struct node *h,int x){
    struct node *head,*tail,*p;
    head=h;
    p=head->next;
    tail=head;
    while(p!=NULL){
        if(p->data==x){
            tail->next=p->next;
            free(p);
            p=tail->next;
            n--;
        }
        else{
            tail=p;
            p=p->next;
        }
    }
}
void print(struct node* h){
    static int count = 0;  // 静态变量,记录调用次数
    count++;
    struct node *head,*tail,*p;
    head=h;
    p=head->next;
    while(p!=NULL){
        printf("%d",p->data);
        if(p->next!=NULL){
            printf(" ");
        }
        p=p->next;
    }
    if(count==1){
        printf("\n");
    }
    
}
相关推荐
Dlrb12116 小时前
数据结构-链表
数据结构·链表·逻辑结构·单向链表·物理结构·valgrind工具
小的~~6 小时前
算法题:只出现一次的数字
数据结构·算法
一切皆是因缘际会6 小时前
从概率拟合到内生心智:七层投影架构重构AGI数字生命新范式
大数据·数据结构·人工智能·重构·架构·agi
历程里程碑6 小时前
56 . 高效ET非阻塞IO服务器设计指南
java·运维·服务器·开发语言·数据结构·c++·排序算法
南境十里·墨染春水7 小时前
数据结构 —— 顺序表
数据结构
tongluowan0077 小时前
数据结构 Bitmap(位图)示例 - 用户签到系统
开发语言·数据结构·bitmap·用户签到系统
洛水水7 小时前
Redis对象类型与底层数据结构
数据结构·数据库·redis
Hesionberger7 小时前
LeetCode114:二叉树展开为链表(三解法)
数据结构
一行代码一行诗++7 小时前
循环的嵌套
数据结构·算法