鱼C论坛

 找回密码
 立即注册
查看: 3935|回复: 1

[已解决]求助求助!!!用c语言实现

[复制链接]
发表于 2021-4-14 14:27:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 看清之后才看轻 于 2021-4-14 15:15 编辑

输入若干的正整数(输入-1时结束) ,建立一个单向链表;再输入一正整数m,删除链表中值为m的所有节点。(用c实现)
最佳答案
2021-4-14 17:24:46
本帖最后由 henkuderen 于 2021-4-14 17:26 编辑
#include <stdio.h>
#include <stdlib.h>
struct ListNode
{
int data;
struct ListNode *next;
};
 
struct ListNode *readlist();
struct ListNode *delete_val( struct ListNode *L, int m );
void printlist( struct ListNode *L )
{
    struct ListNode *p = L;
    while (p)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}
 
int main()
{
    int val;
    printf("连续输入多个整数(-1表示结束):");
    struct ListNode *L = readlist();
    printf("\n链表的数据: ");
    printlist(L);
    printf("输入要删除的整数:");
    scanf("%d", &val);
    L = delete_val(L, val);
    printlist(L);
    return 0;
}
 
struct ListNode *readlist()
{
    struct ListNode *head,*p1,*p2;
    int num;
    int size = sizeof(struct ListNode);
    head = NULL; 
    while(1)
    {
        scanf("%d", &num);
        if(num == -1) //-1跳出
        {
            break;
        }
        p1 = (struct ListNode*)malloc(size);
        p1->data = num;
        p1->next = NULL;
        if(head == NULL)
        {
           head = p1;
        }
        else
        {
           p2->next = p1; 
        }
        p2 = p1;
    }
    return head;
}
 
struct ListNode *delete_val( struct ListNode *L, int val )
{
    struct ListNode *ptr, *ptr1;
 
    while( L != NULL && ( L->data == val) )
    {
        ptr1 = L;
        L = L->next;
        free(ptr1);
    }
    if( L == NULL )
        return NULL;
    ptr = L;
    ptr1 = L->next;
    while( ptr1 != NULL)
    {
        if( ptr1->data == val )
        {
            ptr->next = ptr1->next;
            free(ptr1);
        }
        else
            ptr = ptr1;
        ptr1 = ptr->next;
    }
    return L;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-4-14 17:24:46 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +5 鱼币

本帖最后由 henkuderen 于 2021-4-14 17:26 编辑
#include <stdio.h>
#include <stdlib.h>
struct ListNode
{
int data;
struct ListNode *next;
};
 
struct ListNode *readlist();
struct ListNode *delete_val( struct ListNode *L, int m );
void printlist( struct ListNode *L )
{
    struct ListNode *p = L;
    while (p)
    {
        printf("%d ", p->data);
        p = p->next;
    }
    printf("\n");
}
 
int main()
{
    int val;
    printf("连续输入多个整数(-1表示结束):");
    struct ListNode *L = readlist();
    printf("\n链表的数据: ");
    printlist(L);
    printf("输入要删除的整数:");
    scanf("%d", &val);
    L = delete_val(L, val);
    printlist(L);
    return 0;
}
 
struct ListNode *readlist()
{
    struct ListNode *head,*p1,*p2;
    int num;
    int size = sizeof(struct ListNode);
    head = NULL; 
    while(1)
    {
        scanf("%d", &num);
        if(num == -1) //-1跳出
        {
            break;
        }
        p1 = (struct ListNode*)malloc(size);
        p1->data = num;
        p1->next = NULL;
        if(head == NULL)
        {
           head = p1;
        }
        else
        {
           p2->next = p1; 
        }
        p2 = p1;
    }
    return head;
}
 
struct ListNode *delete_val( struct ListNode *L, int val )
{
    struct ListNode *ptr, *ptr1;
 
    while( L != NULL && ( L->data == val) )
    {
        ptr1 = L;
        L = L->next;
        free(ptr1);
    }
    if( L == NULL )
        return NULL;
    ptr = L;
    ptr1 = L->next;
    while( ptr1 != NULL)
    {
        if( ptr1->data == val )
        {
            ptr->next = ptr1->next;
            free(ptr1);
        }
        else
            ptr = ptr1;
        ptr1 = ptr->next;
    }
    return L;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 08:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表