数据结构算法——1007. 环形双向链表的删除操作(待精简

题目

在这里插入图片描述

思路

搞清楚环形链表在 开头、 中部、结尾 ,以及链表是否为空?单个元素?多个元素?插入和删除的情况
代码有待精简

代码(未精简

#include<iostream>
using namespace std;
typedef long long ll;


struct node
{
    ll data;
    node* next;
    node* prev;
    node()
    {
        data = 0;
        next = NULL;
        prev = NULL;
        //cout << data << next << prev << "111";
    }

    int append(ll n)
    {
        if(next == NULL)//只有头指针可以操作
        {
            node* temp = new node;
            next = temp;
            temp->data = n;
            temp->next = temp;
            temp->prev = temp;
            return 1;//表示插入成功
        }

        node* record = next;
        node* search = next;
        while(search->next != record)
            search = search->next;//找到尾部
        
        node* temp = new node;
        temp->data = n;
        temp->prev = search;
        temp->next = record;
        record->prev = temp;
        search->next = temp;
        return 1;
        
    };

    int del(ll n)
    {
        int flag = 0;
        if(next == NULL)//空
            return flag;

        node* record = next;
        node* search = next;

        if(search->next == record)//只有一个
        {
            if(search->data == n)
            {
                next = NULL;
                delete search;
                flag = 1;
            }
            return flag;
        }
        else if(search->next != record)//不止一个
        {
            while(record->data == n && search->next != record)
            {
                node*temp = record;
                record->prev->next = record->next;
                record->next->prev = record->prev;

                next = record->next;
                search = record->next;
                record = record->next;
                delete temp;
                flag = 1;
            }
            while(search->next != record)
            {
                if(search->data == n)
                {
                    node* temp = search;
                    search->next->prev = search->prev;
                    search->prev->next = search->next;
                    search = search->next;
                    delete temp;
                    flag = 1;
                }
                else
                {
                    search = search->next;
                }
            }
            //还剩最后一个数据没遍历,可能只有一个
            if(search->next == record && record->next == search)
            {
                if(search->data == n)
                {
                    next = NULL;
                    delete search;
                    flag = 1;
                }
            }
            else
            {
                if(search->data == n)
                {
                    node*temp = search;
                    search->next->prev = search->prev;
                    search->prev->next = search->next;
                    search = search->next;
                    delete temp;
                    flag = 1;
                }
            }
        }
        return flag;
    };


    void print()
    {
        node* record = next;
        if(record == NULL)
        {
            //cout << "nothing" << endl;
            return;
        }


        node* search = next;
        while(search->next != record)
        {
            cout << search->data << " ";
            search = search->next;
        }
        cout << search->data << endl;
    };

};



int main()
{
    ll n = 0; 
    node* head = new node;
    while(1)
    {
        cin >> n;
        if(n == -1)
            break;
        head->append(n);
    }
    //head->print();
    while(1)
    {
        cin >> n;
        if(n == -1)
        break;
        if(!head->del(n))
        cout << "-1"<<endl;

        //head->print();
    }
    head->print();

}

做一门精致,全面详细的 java数据结构算法!!!让天下没有难学的数据结构,让天下没有难学的算法,不吹不黑,我们的讲师及其敬业,可以看到课程视频,课件,代码的录制撰写,都是在深夜,如此用心,其心可鉴,他不掉头发,谁掉头发???总之你知道的,不知道的,我们都讲,并且持续更新,走过路过,不要错过,不敢说是史上最全的课程,怕违反广告法,总而言之,言而总之,这门课你值得拥有,好吃不贵,对于你知识的渴求,我们管够管饱话不多说,牛不多吹,我们要讲的本门课程内容:稀疏数组、单向队列、环形队列、单向链表双向链表环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、基数排序(桶排序)、堆排序、排序速度分析、二分查找、插值查找、斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、多路查找树(B树B+树和B*树)、图、图的DFS算法和BFS、程序员常用10算法、二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法马踏棋盘算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值