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

输入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");
    }
    
}
相关推荐
quaer2 小时前
弗洛伊德算法--判圈法寻找环的入口O(n) O(1)
数据结构·算法
xys_6786 小时前
深挖数据结构:树和二叉树(上)
数据结构·算法
BeiGuTing_code6 小时前
Java动态数组(一)
java·数据结构·windows
Code_Solitude10 小时前
传智杯备赛代码整理(前4题)
数据结构·算法
Jasmine_llq10 小时前
《P8816 [CSP-J 2022] 上升点列》
数据结构·算法·贪心·排序·二维动态规划 dp·类背包状态转移
辛苦才能11 小时前
C++ 哈希表深度解析:删除为什么必须打标记,负载因子为什么卡 0.7
开发语言·数据结构·c++·算法
JasmineX-111 小时前
数据结构(笔记)——顺序栈
c语言·数据结构·笔记
凉茶钱13 小时前
list:哨兵节点,const_iterator 和 const iterator的区别与迭代器失效
数据结构·c++·list
敲代码的苦1314 小时前
头歌数据结构-排序的实现及其应用
数据结构
有同事要进步15 小时前
Leecode第68题:x的平方根
java·数据结构·算法