列表

详情


CC11. 牛牛的链表删除

描述

牛牛从键盘输入了一个长度为 n 的数组,把这个数组转换成链表然后把链表中所有值是 x 的节点都删除。

输入描述

第一行输入两个正整数 n 和 x 表示数组的长度和要删除的链表节点值 x 。
第二行输入 n 个正整数表示数组中每个元素的值。

输出描述

把数组转换成链表然后删除所有值是 x 的节点,删除后输出这个链表。

示例1

输入:

5 3
1 5 3 2 3

输出:

1 5 2

示例2

输入:

5 3
1 5 2 7 8

输出:

1 5 2 7 8

示例3

输入:

5 3
1 5 3 2 4

输出:

1 5 2 4

原站题解

C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2022-03-21

#include "stdio.h"
#include "stdlib.h"

typedef struct Link
{
    int data;
    struct Link *next;
}link;

int main(){
    int len,del_val;
    link *p = (link*)malloc(sizeof(link));//创建头节点
    link *temp = p;
    
    scanf("%d",&len);
    scanf("%d",&del_val);
    
    for(int i=0; i<len; i++){
        link *a = (link *)malloc(sizeof(link));
        scanf("%d",&a->data);
        a->next = NULL;//新创建为尾节点
        temp->next = a;//将上一节点指针指向当前节点
        temp = temp -> next;//当前节点为新创建的节点
    }
    
    temp = p;
    while(temp->next != NULL){
        if(temp->next->data==del_val)
            if(temp->next->next==NULL){
                temp->next = NULL;
                break;
            }
            else{
                temp->next = temp->next->next;
                temp = temp->next;
            }
        else
            temp = temp->next;
        printf("%d ",temp->data);
    }
}

C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2022-03-17

#include<stdio.h>
#define LEN sizeof(Link)
typedef struct List
{
    int value;
    struct List*next;
}Link,*Linklist;

int main()
{
    int i,n,x;
    scanf("%d %d",&n,&x);
    int array[n];
    for(i=0;i<n;i++)
    {
        scanf("%d",&array[i]);
    }
    Link*head=(Link*)malloc(LEN);
    Link*p=head;
    for(i=0;i<n;i++)
    {
        Link*s=(Link*)malloc(LEN);
        s->value=array[i];
        s->next=NULL;
        p->next=s;
        p=s;
    }
    p=head;
    while(p->next)
    {
        /*if(p->value==x)
        {
            p=p->next;
            head=p;
        }*/
        if(p->next->value==x)
        {
            p->next=p->next->next;
        }
        else
        {
            p=p->next;
        }
    }
    p=head;
    while(p->next)
    {
        p=p->next;
        printf("%d ",p->value);
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 312KB, 提交时间: 2022-07-26

#include<stdio.h>
#include<stdlib.h>
struct node{
    int data; 
    struct node* next;
};
int main(){
    int n,x,i;
    int a[100];
    scanf("%d",&n);
     scanf("%d",&x);
    struct node*head=malloc(sizeof(struct node));
    head->next=NULL;
    struct node* current=head;
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
        struct node* node=malloc(sizeof(struct node));
        node->data=a[i];
        node->next=NULL;
        current->next=node;
        current=current->next;
    }
    struct node* currentfron=head;
    current=head->next;
    while(current){
        if(current->data==x){
            currentfron->next=current->next;
        }
        currentfron=current;
        current=current->next;
    }
    current=head->next;
    while(current){
        printf("%d ",current->data);
        current=current->next;
    }
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 312KB, 提交时间: 2022-04-15

#include <stdio.h>
#include <stdlib.h>

typedef struct link{
    int data;
    struct link *next;
}Link;

int main(void)
{
    int len=0;
    int delvalue=0;
    int arr[10]={0};
    Link *head=(Link*)malloc(sizeof(Link));
    Link *temp=head;
    Link *lasttemp=NULL;
    
    scanf("%d %d",&len, &delvalue);
    for(int i=0;i<len;i++)
    {
        scanf("%d ", &arr[i]);
    }
    
    for(int j=0;j<len;j++)
    {
        Link *a=(Link*)malloc(sizeof(Link));
        a->data=arr[j];
        a->next=NULL;
        temp->next=a;
        temp=temp->next;
    }
    temp=head;
    
    for(int k=0;k<len;k++)
    {
        lasttemp=temp;
        temp=temp->next;
        if((temp->data)==delvalue)
        {
            Link *del=temp;
            lasttemp->next=lasttemp->next->next;
            //free(del);
        }        
    }
    temp=head;
    
    while(temp->next)
    {
        temp=temp->next;
        printf("%d ", temp->data);
    }
    
    return 0;
}

C 解法, 执行用时: 2ms, 内存消耗: 316KB, 提交时间: 2022-06-06

#include <stdio.h>
#include <stdlib.h>

typedef struct link
{
    int data;
    struct link *next;
}link;

link *create_list(int n,int arr[])
{
    link *head = NULL;
    link *list = NULL;
    link *tail = NULL;
    head = (link *)malloc(sizeof(link));
    if(head == NULL)
    {
        printf("malloc error");
        return head;
    }
    head->next = NULL;
    tail = head;
    for(int i = 0;i < n;i++)
    {
        list = (link *)malloc(sizeof(link));
        if(list == NULL)
        {
            printf("malloc error");
            return head;
        }
        list->data = arr[i];
        tail->next = list;
        tail = list;
        list->next = NULL;
    }
    return head;
}

void print_list(link *head)
{
    link *pa = head->next;
    while(pa != NULL)
    {
        printf("%d ",pa->data);
        pa = pa->next;
    }
}

link *del_list(link *head,int num)
{
    link *pa = head;
    link *pt = head->next;
    while(pt != NULL)
    {
        if(num == pt->data)
        {
            pa->next = pt->next;
            free(pt);
            break;
        }
        pa = pt;
        pt = pt->next;  
    }
    return head;
}
int main()
{
    int n = 0;
    int arr[20];
    int i = 0;
    int num = 0;
    scanf("%d",&n);
    scanf("%d",&num);
    for(i = 0;i < n;i++)
    {
        scanf("%d",&arr[i]);
    }
    link *head = create_list(n,arr);
    link *pp = del_list(head,num);
    print_list(pp);

    return 0;
}

上一题