问题 L: 高程08-04:从整数链表中删除指定数

问题 L: 高程08-04:从整数链表中删除指定数

时间限制: 1 Sec  内存限制: 128 MB
提交: 2544  解决: 826
[提交][状态][讨论版][命题人:]

题目描述

在删除节点数据函数中填空,首先建立整数链表,然后删除所有与指定的数相等的结点。如果原链表中找不到要删除的数,就什么也不做。 (提示:使用结构体数据)

#include <stdio.h>
#include <stdlib.h>
struct Link *AppendNode(struct Link *head);
void DispLink(struct Link *head);
void freenoheadlist(struct Link *h);
struct Link
{
    int data;
    struct Link *next;
};

//函数功能:从head指向的链表中删除所有节点数据为nodeData的节点。注意:该链表不带头结点
//函数返回删除节点后的链表的头节点指针
struct Link *DeleteNode(struct Link *head, int nodeData)
{    

    //在这里补充代码
}

int main()

    int  i = 0,data1,n;                
    struct Link *head = NULL; //指向链表头
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        head = AppendNode(head);
    scanf("%d",&data1);
    head = DeleteNode(head, data1);
    DispLink(head);
    freenoheadlist(head);
    return 0;
}
//函数功能:释放链表空间
void freenoheadlist(struct Link *h)
{
    struct Link *t;
    while (h)
    {
        
t=h->next;
        free(h);
        h=t;
    }
}

//函数功能:新建一个节点,并将该节点添加到链表的末尾,返回添加节点后的链表的头节点指针
struct Link *AppendNode(struct Link *head)
{
     struct Link *p = NULL;
     struct Link *pr = head;
     int data;
     p = (struct Link *)malloc(sizeof(struct Link)); //为新节点申请内存
     if (p == NULL)             //若申请内存失败,则打印错误信息,退出程序
     {
          exit(0);
     }
     if (head == NULL) //若原链表为空表,则将新建节点置为首节点
     { 
           head = p;
     }
     else                  //若原链表为非空,则将新建节点添加到表尾
     { 

            //若未到表尾,则继续移动指针pr,直到pr指向表尾
           while (pr->next != NULL)
           { 
                 pr = pr->next;
           }
           pr->next = p; //将新建节点添加到链表的末尾
    }
    pr = p;              //让pr指向新建节点
    scanf("%d", &data);        //输入节点数据
    pr->data = data;
    pr->next = NULL; //将新建节点置为表尾
    return head;                //返回添加节点后的链表的头节点指针
}
//函数功能:显示所有已经建立好的节点的节点号和该节点中数据项内容
void DispLink(struct Link *head)
{
    struct Link *p = head;
    while (p != NULL)            //若不是表尾,则循环打印
    {
        printf("%d\n", p->data); //打印第j个节点的数据
        p = p->next;              //让p指向下一个节点
    }                            
}

输入

输入n表示链表中有几个数;

然后输入n个整数建立链表;

最后输入要删除的数。

输出

输出删除指定节点后的整数链表。

样例输入

5
12 23 34 45 56
34

样例输出

12
23
45
56

提示

[提交][状态]