标题:谁来帮我看一下:我写的链表节点删除函数错在哪里
只看楼主
小焦叔叔
Rank: 1
来 自:广西 河池
等 级:新手上路
帖 子:59
专家分:2
注 册:2020-2-15
结帖率:78.57%
已结贴  问题点数:20 回复次数:2 
谁来帮我看一下:我写的链表节点删除函数错在哪里
#include"stdio.h"
#include"conio.h"
#include"stdlib"

struct node
{
    char text[10];
    int i;
    struct node *next;
};

typedef node node;

node *head;

node *CreatLink();
void PrintLink(node *head);
void InsNode(node *head,int i);
void Insert(node *ptr1,node *ptr2,node *ins);
void DelNode(node *head,int i);
void DelLink(node *head);

void main()
{
    char menu=0;
    int i=0;

    printf("\n菜单:N--新建  P--输出  I--插入  D--删除  E--退出\n\n");
    while(1)
    {
        case 'N':head=CreatLink();break;
        case 'P':PrintLink(head);break;
        case 'I':printf("请输入被插入节点的序号:");
                 scanf("%d",&i);
                 InsNode(head,i);
                 break;
        case 'D':printf("请输入要删除节点的序号:");
                 scanf("%d",&i);
                 DelNode(head,i);
                 break;
        case 'E':DelLink(head);
                 printf("数据已经删除!");
                 goto Loop;
    }
    Loop:;
}

node *CreatLink()
{
    node *head;
    int i=0;

    printf("请输入新节点序号:");
    scanf("%d",i);
    if(i==-1)
    {
        return(NULL);
    }
    else
    {
        printf("请输入新节点数据信息:");
        scanf("%s",head->text);
        head->i=i;
        head->next=CreatLink();
        return(head);
    }
}

void PrintLink(node *head)
{
    if(head!=NULL)
    {
        printf("%02d  %s->",head->i,head->text);
        PrintLink(head->next);
    }
}

void InsNode(node *head,int i)
{
    node *ins;

    if(head->next!=NULL)
    {
        if(head->next->i==i)
        {
            ins=(node *)malloc(sizeof(node));
            printf("请输入插入节点信息:");
            scanf("%s",ins->text);
            ins->i=i+10;     //为了调试容易通过
            Insert(head,head->next,ins);
            head=head->next;
        }
        InsNode(head->next,i);
    }   
}

void Insert(node *ptr1,node *ptr2,node *ins)
{
    ptr1->next=ins;
    ins->next=ptr2;
}

void DelNode(node *head,int i)     //这个函数通不过,电脑有爆鸣声
{
    node *del;

    if(head!=NULL)
    {
        if(head->i==i)
        {
            del=head;
            head=head->next;
            free(del);
        }
        DelNode(head->next,i);
    }
}

void DelLink(node *head)
{
    if(head!=NULL)
    {
        DelLink(head->next);
        free(head);
    }
}

这是我今天写的程序,那个节点删除的函数有问题,望高手指点,谢谢!


[此贴子已经被作者于2020-3-30 16:04编辑过]

搜索更多相关主题的帖子: printf void next head node 
2020-03-30 16:02
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
得分:20 
        if(head->i==i)
        {
            del=head;
            head=head->next;
            free(del);
        }
记住C只有值传递 你修改形参是不会影响实参的
这一步并不能让上一个节点的next 指向head的next
等于你的链表断开了

https://zh.
2020-03-30 16:17
小焦叔叔
Rank: 1
来 自:广西 河池
等 级:新手上路
帖 子:59
专家分:2
注 册:2020-2-15
得分:0 
回复 2楼 lin5161678
谢谢你的帮助!我刚学链表,可能还有东西不懂,仔细看一下书先。

自学成才
2020-03-30 17:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-500728-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.068658 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved