链表生成并删除某一个节点

<span style="font-size:18px;">
//链表生成并删除某一个节点
#include<iostream>
using namespace std;
struct student
{
    long number;
    float score;
    student * next;
};
student * head;   //链首指针
student * create()
{
    student * ps;  //创建的结点指针
    student * pEnd;   //链尾指针,用于在后面插入结点
    ps = new student;   //新建一个结点,准备插入链表
    cin >> ps->number >> ps->score;    //给结点赋值
    head = NULL;       //一开始链表为空
    pEnd = ps;
    while (ps->number != 0)   //<span style="font-size:18px;"> (0时结束)</span>
    {
        if (head == NULL)
            head = ps;
        else
            pEnd->next = ps;

        pEnd = ps;
        ps = new student;
        cin >> ps->number >> ps->score;
    }
    pEnd->next = NULL;
    delete ps;
    return(head);

}
void showlist(student * head)
{
    cout << "now the iterms of list are \n";
    while (head)
    {
        cout << head->number << "," << head->score << endl;
        head = head->next;

    }
}

void Delete(student * head, long number)    //调用的结点删除函数
{
    student * p;
    if (!head)
    {
        cout << "\nList null!\n";
        return;     //表示未作删除

    }
    if (head->number == number)//该死,怪不得不能删除链表后面指针if (head->number = number)//要删除的节点在链首
    {
        p = head;
        head = head->next;
        delete p;
        cout << number << "the head of the listr have been deleted \n";
        return;
    }

    for (student * pguard = head; pguard->next; pguard = pguard->next)
    {
        if (pguard->next->number == number)  //确定下一个节点就是要删除的
        {
            p = pguard->next;  //待删
            pguard->next = p->next;
            delete p;
            cout << number << "have been deleted \n";
            return;
        }
    }
    cout << number << "not found!\n";

}
void main()
{
    showlist(create());
    Delete(head, 14);

}

</span>

列如输入:54 3.4

                  23 3.2

                  24 3.5

                  15 4.1

                   66 4.0

                   0 0.0    (0时结束)

得到输出:54 3.4

                  23 3.2

                  24 3.5

                  15 4.1

                   66 4.0

                  14not found!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值