久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

在O(1)時(shí)間刪除鏈表結(jié)點(diǎn)——13

    給定單向鏈表的頭指針和一個(gè)結(jié)點(diǎn)指針,定義一個(gè)函數(shù)在O(1)時(shí)間刪除該結(jié)點(diǎn)。

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、網(wǎng)站空間、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、西陵網(wǎng)站維護(hù)、網(wǎng)站推廣。

    因?yàn)橐髸r(shí)間復(fù)雜度為O(1),所以肯定不能遍歷鏈表,那樣的話時(shí)間復(fù)雜度就是O(N)了;可以想到,其實(shí)要求刪除該結(jié)點(diǎn),真正的目的并不是要將結(jié)點(diǎn)的數(shù)據(jù)包括結(jié)點(diǎn)所占的內(nèi)存都給刪除,只是想讓數(shù)據(jù)消失就可以了,至于結(jié)點(diǎn),除去任意一個(gè)結(jié)點(diǎn)所占的空間都是OK的;

    所以,這里換一種思路,若要?jiǎng)h除指定的結(jié)點(diǎn),一般需要將前一個(gè)結(jié)點(diǎn)的next指針指向要?jiǎng)h除結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn),這樣要?jiǎng)h除的結(jié)點(diǎn)就可以脫離鏈表而被刪除了,但這里關(guān)鍵就是即是單鏈表沒(méi)有prev的指針也沒(méi)辦法遍歷鏈表找到前一個(gè)結(jié)點(diǎn),但是可以知道要?jiǎng)h除結(jié)點(diǎn)的下一個(gè)結(jié)點(diǎn)和下下個(gè)結(jié)點(diǎn)啊,因此可以用代替刪除法,用下一個(gè)結(jié)點(diǎn)來(lái)代替要?jiǎng)h除的結(jié)點(diǎn)去“死”,而二者的數(shù)據(jù)只需要交換一下就可以了,因此刪除的結(jié)點(diǎn)位置不過(guò)是下一個(gè)結(jié)點(diǎn),而數(shù)據(jù)還是要?jiǎng)h除的數(shù)據(jù);

程序設(shè)計(jì)如下:

#include <iostream>
#include <assert.h>
using namespace std;

template <class T>
struct ListNode  //鏈表結(jié)點(diǎn)結(jié)構(gòu)體
{
    T _data;
    ListNode<T>* _next;
};

template <class T>
ListNode<T>* buy_node(T data)  //構(gòu)建鏈表結(jié)點(diǎn)
{
    ListNode<T>* tmp = new ListNode<T>;
    tmp->_data = data;
    tmp->_next = NULL;
    return tmp;
}

template <class T>
void init_list(ListNode<T>** node, T data)   //初始化鏈表
{
    *node = buy_node(data);
}

template <class T>
void push_node(ListNode<T>*& head, T data)   //在鏈表中鏈入結(jié)點(diǎn)
{
    if(head == NULL)
    {   
        init_list(&head, data);
        return;
    }   
    ListNode<T>* tmp = head;
    while(tmp->_next != NULL)
    {   
        tmp = tmp->_next;
    }
    tmp->_next = buy_node(data);
}

template <class T>
void print_list(ListNode<T>* head)  //打印鏈表
{
    while(head != NULL)
    {
        cout<<head->_data<<"->";
        head = head->_next;
    }
    cout<<"NULL"<<endl;
}

template <class T>
void destroy_list(ListNode<T>*& head)  //刪除銷(xiāo)毀鏈表
{
    if(head != NULL)
    {
        ListNode<T>* cur = head;
        ListNode<T>* tmp = head;
        while(cur != NULL)
        {
            tmp = cur;
            cur = cur->_next;
            delete tmp;
        }
        head = NULL;
    }
}
template <class T>
ListNode<T>* GetNode(ListNode<T>* pHead, size_t n)  //獲取要?jiǎng)h除結(jié)點(diǎn)的地址
{
    assert(pHead);
    ListNode<T>* tmp = pHead;
    while(((--n) != 0) && (tmp != NULL))
    {
        tmp = tmp->_next;
    }
    if(tmp == NULL)
        return NULL;
    else
        return tmp;
}

template <class T>
void DeleteNode(ListNode<T>* pHead, ListNode<T>* dNode)  //刪除指定結(jié)點(diǎn)
{
    assert(pHead && dNode);

    if(dNode->_next == NULL)
    {
        delete dNode;
        dNode = NULL;
        return;
    }

    ListNode<T>* tmp = dNode->_next;
    swap(dNode->_data, tmp->_data);
    dNode->_next = tmp->_next;
    delete tmp;
    tmp = NULL;
}

int main()
{
    ListNode<int>* list = NULL;
    push_node(list, 1);
    push_node(list, 2);
    push_node(list, 3);
    push_node(list, 4);
    push_node(list, 5);
    push_node(list, 6);
    push_node(list, 7);
    push_node(list, 8);
    push_node(list, 9);

    cout<<"print list: ";
    print_list(list);
    cout<<"delete Node later: ";
    ListNode<int>* dNode = GetNode(list, 4);
    DeleteNode(list, dNode);
    print_list(list);

    destroy_list(list);
    return 0;
}

運(yùn)行程序,得結(jié)果:

在O(1)時(shí)間刪除鏈表結(jié)點(diǎn)——13

《完》

網(wǎng)頁(yè)題目:在O(1)時(shí)間刪除鏈表結(jié)點(diǎn)——13
轉(zhuǎn)載注明:http://sd-ha.com/article24/gpgoce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、搜索引擎優(yōu)化、網(wǎng)站收錄手機(jī)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作