真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語(yǔ)言線性結(jié)構(gòu)鏈?zhǔn)浇Y(jié)構(gòu)鏈表逆置及重復(fù)節(jié)點(diǎn)刪除-創(chuàng)新互聯(lián)

完整代碼:
#include#includetypedef int datatype;
typedef struct node *ptrNode;
typedef struct node
{
    int data;
    ptrNode next;
}lnode, *linkList;

ptrNode create_node(datatype d);
ptrNode create_node();
void link_list_front(ptrNode l,datatype d);
void link_list_rear(ptrNode l,datatype d);
void print(ptrNode l);

linkList init_node()
{
    linkList ptr = (linkList)malloc(sizeof(lnode));
    ptr->next=NULL;
    return ptr;
}

//鏈表逆置
void reverse_list(linkList head)
{
    linkList p = head->next;
    linkList q;
    head->next = NULL;
    while(p)
    {
        q=p;
        p=p->next;
        q->next = head->next;
        head->next = q;
    }
    return ;
}

//刪除重復(fù)元素
void delect_repetition(linkList head)
{
    if(head->next==NULL)//空鏈表直接返回
        return ;

    linkList current = head->next;//當(dāng)前節(jié)點(diǎn)
    linkList check   ;//審視節(jié)點(diǎn)
    linkList pre;//審視節(jié)點(diǎn)前驅(qū)

    int is;
    while(current->next)
    {
        check=current->next;
        pre = current;
        while(check)
        {
            is=0;
            if(check->data == current->data)//刪除節(jié)點(diǎn)
            {
                pre->next = check->next;//前兩步為刪除節(jié)點(diǎn),第三步是重新組織判斷點(diǎn)
                free(check);
                check = pre;
                is=1;
            }
            check = check->next;
            if(!is)
            pre = pre->next;//注意前驅(qū)節(jié)點(diǎn)也要先下滑
        }
        if(current->next)//在上述過(guò)程后current有可能成為尾節(jié)點(diǎn),所以這里要判斷一下其next是否存在
        current = current->next;
    }

}

int main()
{
    printf("\n測(cè)試1\n");
    linkList head = create_node();
    link_list_rear(head,10);
    link_list_rear(head,15);
    link_list_rear(head,18);
    link_list_rear(head,15);
    link_list_rear(head,10);
    link_list_rear(head,6);
    link_list_rear(head,6);
    printf("原鏈表為:\n");
    print(head);

    reverse_list(head);
    printf("逆置后鏈表為:\n");
    print(head);

    delect_repetition(head);
    printf("逆置鏈表刪除重復(fù)節(jié)點(diǎn)為:\n");
    print(head);

    printf("\n測(cè)試2\n");
    linkList head2 = create_node();
    printf("原鏈表為:\n");
    print(head2);
    reverse_list(head2);
    printf("逆置后鏈表為:\n");
    print(head2);
    delect_repetition(head2);
    printf("逆置鏈表刪除重復(fù)節(jié)點(diǎn)為:\n");
    print(head2);

    printf("\n測(cè)試4\n");
    linkList head4 = create_node();
    link_list_rear(head4,6);
    link_list_rear(head4,6);
    link_list_rear(head4,6);
    link_list_rear(head4,6);
    link_list_rear(head4,6);
    link_list_rear(head4,6);
    link_list_rear(head4,6);
    printf("原鏈表為:\n");
    print(head4);
    reverse_list(head4);
    printf("逆置后鏈表為:\n");
    print(head4);
    delect_repetition(head4);
    printf("逆置鏈表刪除重復(fù)節(jié)點(diǎn)為:\n");
    print(head4);

    printf("\n測(cè)試5\n");
    linkList head5 = create_node();
    link_list_rear(head5,1);
    link_list_rear(head5,2);
    link_list_rear(head5,3);
    link_list_rear(head5,4);
    link_list_rear(head5,5);
    link_list_rear(head5,6);
    link_list_rear(head5,7);
    printf("原鏈表為:\n");
    print(head5);
    reverse_list(head5);
    printf("逆置后鏈表為:\n");
    print(head5);
    delect_repetition(head5);
    printf("逆置鏈表刪除重復(fù)節(jié)點(diǎn)為:\n");
    print(head5);

    return 0;
}

//下面五個(gè)函數(shù)是前面博客寫(xiě)的 http://t.csdn.cn/wX7Ce
ptrNode create_node(datatype d)
{
    ptrNode ptn = (ptrNode)malloc( sizeof(lnode) );
    ptn->next = NULL;
    ptn->data = d;

    return ptn;
}
ptrNode create_node()
{
    ptrNode ptn = (ptrNode)malloc( sizeof(lnode) );
    ptn->next = NULL;

    return ptn;
}
//帶頭結(jié)點(diǎn) 頭插
void link_list_front(ptrNode l,datatype d)
{
    ptrNode ptn = create_node(d);
    ptrNode temp = l->next;
    l->next   = ptn ;
    ptn->next = temp;
}

//尾插
void link_list_rear(ptrNode l,datatype d)
{
    ptrNode ptn = create_node(d);
    while(l->next)l=l->next;
    l->next = ptn;
}

void print(ptrNode l)
{
    l=l->next;
    if(l==NULL)
    {
        printf("NULL\n");
        return ;
    }
    while(l)
    {
        printf("%d ",l->data);
        l=l->next;
    }
    printf("\n");
}
代碼分析:

main()函數(shù)后面的函數(shù)是之前的博客里寫(xiě)的,一些鏈表的基礎(chǔ)操作,想再看一下的同學(xué)可以點(diǎn)這個(gè)鏈接:http://t.csdn.cn/wX7Ce ,同樣因?yàn)橛泻瘮?shù)create_node()重載所以自己想試著運(yùn)行的話可以構(gòu)建C++的項(xiàng)目,或者把同名函數(shù)改一下就行了,除了這點(diǎn)都是C的語(yǔ)法。

成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的潁州網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

鏈表逆置其實(shí)就是鏈表頭插的變形,要注意的是在p獲取head->next后要把head->next改為NULL做初始化;在向下遍歷p時(shí)要先把p指向p->next再修改q->next,否則就會(huì)失去原鏈表的節(jié)點(diǎn)鏈接。

//鏈表逆置
void reverse_list(linkList head)
{
linkList p = head->next;
linkList q;
head->next = NULL;
while(p)
{
q=p;
p=p->next;
q->next = head->next;
head->next = q;
}
return ;
}

刪除重復(fù)元素,一是要注意空鏈表不用處理,直接返回,這一步必不可少,因?yàn)橄旅娴膚hile判斷直接就是current->next ,沒(méi)有這一步會(huì)出錯(cuò);二是在向下移動(dòng)check時(shí)pre要同步移動(dòng),但是當(dāng)審視時(shí)刪除了某節(jié)點(diǎn)(下面代碼第19行)時(shí),check要繼續(xù)審視pre的下一個(gè)節(jié)點(diǎn),這時(shí)pre是不用移動(dòng)的,所以27行有一個(gè)判斷;三是在執(zhí)行了刪除步驟后current有可能成為尾節(jié)點(diǎn)(及current->next==NULL,若這里將這個(gè)值賦值給current,則12行while判斷就會(huì)出錯(cuò)),所以30要判斷一下current->next是否存在。

//刪除重復(fù)元素
void delect_repetition(linkList head)
{
    if(head->next==NULL)//空鏈表直接返回
        return ;

    linkList current = head->next;//當(dāng)前節(jié)點(diǎn)
    linkList check   ;//審視節(jié)點(diǎn)
    linkList pre;//審視節(jié)點(diǎn)前驅(qū)

    int is;
    while(current->next)
    {
        check=current->next;
        pre = current;
        while(check)
        {
            is=0;
            if(check->data == current->data)//刪除節(jié)點(diǎn)
            {
                pre->next = check->next;//前兩步為刪除節(jié)點(diǎn),第三步是重新組織判斷點(diǎn)
                free(check);
                check = pre;
                is=1;
            }
            check = check->next;
            if(!is)
            pre = pre->next;//注意前驅(qū)節(jié)點(diǎn)也要先下滑
        }
        if(current->next)//在上述過(guò)程后current有可能成為尾節(jié)點(diǎn),所以這里要判斷一下其next是否存在
        current = current->next;
    }

}

main函數(shù)里是五個(gè)測(cè)試點(diǎn),測(cè)試數(shù)據(jù)都不同,下面是運(yùn)行結(jié)果:

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)站標(biāo)題:C語(yǔ)言線性結(jié)構(gòu)鏈?zhǔn)浇Y(jié)構(gòu)鏈表逆置及重復(fù)節(jié)點(diǎn)刪除-創(chuàng)新互聯(lián)
文章地址:http://weahome.cn/article/ddpejs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部