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

输入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");
    }
    
}
相关推荐
wuyk5554 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
-dzk-4 小时前
【链表】LC 138.随机链表的复制
数据结构·链表
洋不写bug5 小时前
链表补充练习,双链表的模拟实现
java·数据结构·链表·双链表·底层实现
白狐_7985 小时前
408 数据结构|外部排序:流程与 k 路归并
数据结构·算法
我不会起名字3227 小时前
一天一道算法题(26):栈的简单应用
java·数据结构·python·算法·leetcode·golang·
不会就选b8 小时前
算法日常・每日刷题--<贪心+大根堆>2
数据结构·算法
事圆则缓8 小时前
Java 常见数据结构与 Android 使用场景
android·java·数据结构
白狐_7989 小时前
408 数据结构|外部排序优化:怎么减少时间开销
数据结构·算法
kiracrimson21 小时前
从缓存的角度看链表与线性表的差异
数据结构·链表·缓存
心抵鹊1 天前
归并排序之翻转对(hard)
数据结构·算法