鏈表逆序輸出

程序功能:實(shí)現(xiàn)鏈表的就地逆序

程序主要思路:取鏈表中前三個(gè)結(jié)點(diǎn)屯碴,其中表頭結(jié)點(diǎn)為空,不存放數(shù)據(jù)泣栈,用結(jié)構(gòu)體指針 head 表示边灭; 第二個(gè)結(jié)點(diǎn)
用 head->next 進(jìn)行表示饲鄙,第三個(gè)結(jié)點(diǎn)用結(jié)構(gòu)體指針 p 表示。

操作:                                         效果:
head->next->next = NULL;                 令第二個(gè)結(jié)點(diǎn)的 next 指向 NULL几缭,使第二和第三個(gè)結(jié)點(diǎn)斷開
    
temp = p->next;                         

p->next = head->next;                   // B的next指向A

head->next = p;                         // head的next指向P

p = temp;                               // p后移

代碼段:

//===============================================================
//Summary:
//          C語(yǔ)言 類 
//FileName:
//          C語(yǔ)言.c
//Remarks:
//          實(shí)現(xiàn)就地逆置
//Date:
//          2019/8/9 14:45
//Author:
//          張珂(1575595743@qq.com)
//Version:
//          1.0
//===============================================================
#include<stdio.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct node
{
    ElemType data;      //定義字符串類型的data變量
    struct node *next;  //定義結(jié)構(gòu)數(shù)組中的指針
}NODE;
//--------------------向鏈表中填入數(shù)據(jù)--------------------
void CreatFromTail(NODE* l)
{
    NODE *r, *s;
    char c;             //用來(lái)存放輸入的字符 
    int flag = 1;       //設(shè)置一個(gè)標(biāo)志茶行,初始值為1;當(dāng)輸入"$"符號(hào)時(shí)气堕,flag為0纺腊;建表結(jié)束
    r = l;              //r指針動(dòng)態(tài)指向鏈表的當(dāng)前表尾,以便做尾插入茎芭,其初值指向頭結(jié)點(diǎn)
    while (flag)        //循環(huán)輸入表中的元素值揖膜,將建立的新節(jié)點(diǎn)s插入表尾
    {
        c = getchar();  //獲取輸入字符
        if (c != '$')   //判斷是否到達(dá)輸入元素的終點(diǎn); 沒(méi)有到達(dá),使用尾插法
        {
            s = (NODE *)malloc(sizeof(NODE));       //初始化新結(jié)點(diǎn)
            s->data = c;            //為結(jié)點(diǎn)賦值
            r->next = s;            //將新建s結(jié)點(diǎn)插在r結(jié)點(diǎn)(頭結(jié)點(diǎn))之后
            r = s;                  //r結(jié)點(diǎn)后移梅桩,r始終指向表尾
        }
        else            //元素已經(jīng)全部插入
        {
            flag = 0;       //確定跳出循環(huán)的條件
            r->next = NULL;     //將最后一個(gè)結(jié)點(diǎn)的next鏈域置空壹粟,表示鏈表的結(jié)束
        }
    }
}
//--------------------鏈表取反--------------------      方法一
//void Reverse(NODE* head)
//{
//  NODE *pf = NULL, *temp = NULL, *pb = NULL;
//  pf = head;
//  if(head == NULL || head->next == NULL)      //當(dāng)鏈表是空表,或是只有一個(gè)元素時(shí)宿百,不需要進(jìn)行逆序操作        
//      return ;
//  pb = pf->next;
//  head->next = NULL;          //將head結(jié)點(diǎn)從鏈表中分離出來(lái)
//  /*
//      head->  temp        ->      head  <-temp    
//      pf      pb                          pf      pb
//      
//      head特別指代頭結(jié)點(diǎn)趁仙; temp是臨時(shí)結(jié)點(diǎn)洪添,每一次循環(huán)都會(huì)重新定義
//  */
//
//  while (pb != NULL)          //當(dāng)pb存在時(shí)
//  {
//      temp = pb;              //保留原來(lái)的結(jié)點(diǎn)pb                         
//      pb = pb->next;          //pb指向下一結(jié)點(diǎn)
//      temp->next = pf;
//      pf = temp;              //pf指向下一結(jié)點(diǎn)
//  }
//}


//--------------------鏈表逆序--------------------
void Reverse(NODE * head)
{
    NODE *p, *temp;
    if (head->next == NULL || head->next->next == NULL) 
        return;
    /*          A           B               C           D   
        -       -           -              -            -   
        head    head->next  p               temp
    */
    p = head->next->next;
    head->next->next = NULL;        //斷開A與B, p從B點(diǎn)往后移
    while (p != NULL)
    {
        temp = p->next;
        p->next = head->next;       //B的next指向A
        head->next = p;             //head的next指向P
        p = temp;                   //p后移
    }
}
//--------------------輸出鏈表--------------------
void printLink(NODE* head)
{
    NODE *p = head->next;
    while (p != NULL)
    {
        printf("%c  ", p->data);
        p = p->next;
    }
}
int main()
{
    NODE* h;
    h = (NODE*)malloc(sizeof(NODE));
    h->next = NULL;
    printf("please enter some chars:\n");       //輸入數(shù)據(jù)
    CreatFromTail(h);

    printf("The Link you created is :\n");      //打印輸入的數(shù)據(jù)
    printLink(h);
    
    Reverse(h);     
    printf("\nAfter reverse, the link is :\n"); //打印逆置后的數(shù)據(jù)
    printLink(h);
    return 1;
}

參考文章:
https://blog.csdn.net/autumn20080101/article/details/7607148

https://blog.csdn.net/peng_apple/article/details/79614846

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市雀费,隨后出現(xiàn)的幾起案子干奢,更是在濱河造成了極大的恐慌,老刑警劉巖盏袄,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件律胀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡貌矿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門罪佳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)逛漫,“玉大人,你說(shuō)我怎么就攤上這事赘艳∽谜保” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵蕾管,是天一觀的道長(zhǎng)枷踏。 經(jīng)常有香客問(wèn)我,道長(zhǎng)掰曾,這世上最難降的妖魔是什么旭蠕? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮旷坦,結(jié)果婚禮上掏熬,老公的妹妹穿的比我還像新娘。我一直安慰自己秒梅,他們只是感情好旗芬,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著捆蜀,像睡著了一般疮丛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辆它,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天誊薄,我揣著相機(jī)與錄音,去河邊找鬼娩井。 笑死暇屋,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的洞辣。 我是一名探鬼主播咐刨,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼昙衅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了定鸟?” 一聲冷哼從身側(cè)響起而涉,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎联予,沒(méi)想到半個(gè)月后啼县,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沸久,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年季眷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卷胯。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡子刮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窑睁,到底是詐尸還是另有隱情挺峡,我是刑警寧澤,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布担钮,位于F島的核電站橱赠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏箫津。R本人自食惡果不足惜狭姨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲤嫡。 院中可真熱鬧送挑,春花似錦、人聲如沸暖眼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)诫肠。三九已至司澎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間栋豫,已是汗流浹背挤安。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丧鸯,地道東北人蛤铜。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親围肥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子剿干,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 網(wǎng)站: http://ui4app.com/category 技術(shù)網(wǎng)站: http://www.bestsdk.c...
    LYPC_下里巴人閱讀 1,023評(píng)論 0 1
  • 鏈表逆序輸出數(shù)值 創(chuàng)建一個(gè)鏈表之后,翻轉(zhuǎn)該鏈表返回一個(gè)鏈表穆刻,該鏈表由node1->node2->node3變成no...
    firststep閱讀 225評(píng)論 0 0
  • 鏈表學(xué)習(xí) 今天學(xué)習(xí)鏈表的時(shí)候置尔,遇到這樣一個(gè)問(wèn)題,如何把鏈表逆序輸出氢伟。拿到這道題首先想到的結(jié)構(gòu)就是"棧"結(jié)構(gòu)榜轿,因?yàn)樗?..
    firststep閱讀 233評(píng)論 0 0
  • 艱難的寫作 很久沒(méi)試過(guò)寫東西了,久到我覺(jué)得自己都喪失了寫作能力(即使沒(méi)有喪失也是超級(jí)糟糕了)朵锣∶危恍惚間就三年了啊,...
    紅會(huì)滴師妹閱讀 564評(píng)論 0 7
  • 姑父從廣東回來(lái)過(guò)年诚些,講到他所在的工廠進(jìn)來(lái)了一大批機(jī)器人设褐,取代了很多人工工作。他擔(dān)心泣刹,估計(jì)不久的未來(lái),他也會(huì)被替代犀被。...
    木槿楠閱讀 374評(píng)論 0 3