B1025 反轉(zhuǎn)鏈表 (25分)

/*
題意:給一個鏈表锣尉,然后給出一個K刻炒,每K個節(jié)點反轉(zhuǎn)一次

解題:
1、定義及靜態(tài)鏈表自沧,order表示在鏈表中的序號坟奥,
2、初始化拇厢,令order的初值均為maxn爱谁,表示初始時所有節(jié)點為無效節(jié)點
3、由題目給出的鏈表首地址begi遍歷整條鏈表孝偎,并記錄每個有效節(jié)點在鏈表中的序號访敌,統(tǒng)計技術(shù)有效節(jié)點的個數(shù)count。
4衣盾、對節(jié)點進行排序寺旺,按節(jié)點order從小到大排序
5爷抓、輸出鏈表,這個很煩
將n個節(jié)點分塊n/k塊阻塑,枚舉這些完整的塊蓝撇,從后往前輸出節(jié)點信息、注意每一個塊最后節(jié)點next的處理
(1)如果i號塊不是最后一個完整快叮姑,那么next就是(i+2)*k - 1號節(jié)點,也就是(i+1)號塊最后一個節(jié)點
(2)如果i號塊是最后一個塊据悔,同樣有兩種情況
一传透、如果n%k==0,則說明這是整個單聊表的最后一個節(jié)點极颓,輸出-1
二朱盐、如果n%k不等于0,則說明這個完整快后面還有一點尾巴菠隆,那么這個完整塊的最后一個節(jié)點的next不是下一個塊的最后一個兵琳,而是這個塊的第一個,接下來骇径,從前往后輸出即可

learn && wrong:
1躯肌、存在無效節(jié)點的可能
2、反轉(zhuǎn)鏈表只改變節(jié)點的next地址破衔,不改變本身地址清女,因此address和data是綁定的
3、%05d的輸出格式會讓-1出現(xiàn)錯誤晰筛,所以-1要單獨輸出
4嫡丙、給order排序很好
5、排序后輸出下一個節(jié)點读第,就是【i+1】.adderss就很不錯
*/

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 100010;

struct Node{    //定義鏈表曙博,步驟1
    int address,data,next;
    int order;  //節(jié)點在鏈表上的序號,無效節(jié)點為maxn
}node[maxn];

bool cmp(Node a,Node b){
    return a.order < b.order;   //按order從小到大排序
}

int main()
{
    for(int i = 0;i <maxn;i++){ //初始化(步驟2)
        node[i].order = maxn;   //  初始化全部為無效節(jié)點
    }

    int begin, n, K, address;
    scanf("%d%d%d", &begin, &n, &K);    //起始地址怜瞒,節(jié)點個數(shù)父泳、步長
    for(int i = 0;i < n;i++){
        scanf("%d",&address);
        scanf("%d%d", &node[address].data, &node[address].next);
        node[address].address = address;
    }

    int p = begin, count = 0;   //count計數(shù)有效節(jié)點的數(shù)目

    while(p != -1){ //遍歷鏈表找出單鏈表的所有效節(jié)點(步驟3)
        node[p].order = count++;    //節(jié)點在單鏈表中的序號
        p = node[p].next;  //下一個結(jié)點
    }

    sort(node, node + maxn, cmp);   //按單鏈表從頭到尾順序排列(步驟4)
    //有效節(jié)點為前count個節(jié)點,為了下面書寫方便吴汪,因此把count賦給n
    n = count;
    //單鏈表已經(jīng)形成尘吗,下面是按題目要求的輸出(步驟5)
    for(int i = 0;i < n / K;i++){   //枚舉完整的n / K 塊
        for(int j = (i + 1) * K - 1;j < i * K;j--){ //第i塊倒著輸出
            printf("%05d %d %05d\n",    node[j].address, node[j].data, node[j - 1].address);
        }

        //下面是每一塊的最后一個結(jié)點的next地址的處理
        printf("%05d %d ", node[i * K].address, node[i * K].data);
        if(i < n / K - 1){  //如果不是最后一塊,就指向下一塊的最后一個結(jié)點
            printf("%05d\n", node[(i+2) * K - 1].address);
        }else{  //是最后一塊時
            if(n % K == 0){ //恰好是最后一個結(jié)點浇坐,輸出-1
                printf("-1\n");
            }else{  //剩下的不完整塊按原先的順序輸出
                printf("%05d\n", node[(i + 1) * K].address);
                for(int i = n / K * K;i < n;i++){
                    printf("%05d %d", node[i].address, node[i].data);
                    if(n < -1){
                        printf("%05d\n",node[i+1].address);
                    }else{
                        printf("-1\n");
                    }
                }
            }
        }
    }
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末睬捶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子近刘,更是在濱河造成了極大的恐慌擒贸,老刑警劉巖臀晃,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異介劫,居然都是意外死亡徽惋,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門座韵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來险绘,“玉大人,你說我怎么就攤上這事誉碴』鹿祝” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵黔帕,是天一觀的道長代咸。 經(jīng)常有香客問我,道長成黄,這世上最難降的妖魔是什么呐芥? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮奋岁,結(jié)果婚禮上思瘟,老公的妹妹穿的比我還像新娘。我一直安慰自己闻伶,他們只是感情好潮太,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著虾攻,像睡著了一般铡买。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霎箍,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天奇钞,我揣著相機與錄音,去河邊找鬼漂坏。 笑死景埃,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的顶别。 我是一名探鬼主播谷徙,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼驯绎!你這毒婦竟也來了完慧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤剩失,失蹤者是張志新(化名)和其女友劉穎屈尼,沒想到半個月后册着,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡脾歧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年甲捏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鞭执。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡司顿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出兄纺,到底是詐尸還是另有隱情大溜,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布囤热,位于F島的核電站猎提,受9級特大地震影響获三,放射性物質(zhì)發(fā)生泄漏旁蔼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一疙教、第九天 我趴在偏房一處隱蔽的房頂上張望棺聊。 院中可真熱鬧,春花似錦贞谓、人聲如沸限佩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祟同。三九已至,卻和暖如春理疙,著一層夾襖步出監(jiān)牢的瞬間晕城,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工窖贤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留砖顷,地道東北人。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓赃梧,卻偏偏與公主長得像滤蝠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子授嘀,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359