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

输入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");
    }
    
}
相关推荐
祖力551 天前
数据结构的基本概念与单向链表(链表数据类型构造、创建、头插、尾插、头删、尾删)
数据结构·链表
白狐_7981 天前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander2581 天前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法
船厂电气自动化ai大模型1 天前
AI大模型与数学 第32课 函数凹凸性与二阶导数:拐点求解、凹凸区间计算(10道二阶导数计算题)
数据结构·人工智能·python·深度学习·算法
旖旎夜光1 天前
LeetCode 3:无重复字符的最长子串(滑动窗口) —— 题解
数据结构·c++·算法·leetcode·滑动窗口
不会就选b1 天前
算法日常・每日刷题--<优先级队列>2
数据结构·算法
LuminousCPP1 天前
单链表专题(三)-刷题复盘篇:从快慢指针到环形链表 II 数学推导
数据结构·经验分享·笔记·学习·算法·链表
ChaoZiLL1 天前
二叉树经典例题
数据结构·算法
三克的油1 天前
算法基础-1
数据结构·c++·算法
一米阳光86611 天前
软考(中级)软件设计师核心笔记(8)数据结构——树与二叉树
数据结构·笔记·职场发展·软考·软件设计师·中级职称