1、理解題目:
已知條件為兩個鏈表La和Lb,最后得到的結果也是兩個鏈表,只不過是La中的部分結點移動到Lb中,因此,本問題主要是解決是怎么移動的。
2、算法:
在題目中沒有給出結點移動的算法,我們先可以結合實例自己設計一個算法,然后看是不是與程序中的算法一致。如果不是,則再找算法。
實例:
如圖所示,如果我們找到實線的指針,它們分別指向La中的Key1結點(p指針)、Key1的前一個結點(q指針)、Aj(從Key1結點開始的第len個結點,r指針)和Lb中的Key2的前一個結點(s指針),則根據(jù)鏈表操作,用圖中的虛線指針連接,我們就可以把La中從Key1結點開始的共len個結點全部移動到Lb鏈表中。因此算法大致如下:
。1)找到p和q指針;
。2)找到r指針;
。3)找到s指針;
。4)r->next=s->next(即把Aj結點連接到K2結點之前);
。5)s->next=q(即把K1結點連接到原來Lb中K2結點的前一個結點的后面);
注意:經(jīng)過(4)、(5)兩步操作,即實現(xiàn)了移動操作。
(6)要注意的是現(xiàn)在La鏈表已經(jīng)斷開,也必須重新連接上,故要:
但是注意一下程序,就會發(fā)現(xiàn)里面有很多判斷,主要是看判斷是否可以移動。我們考慮后(也可以看程序)發(fā)現(xiàn),在以下幾種情況下,操作不能進行:
。1)La或Lb是空鏈表;
。2)len表示個數(shù)的值,因此不能不大于0;
。3)La中不存在Key1的結點;
(4)La中從Key1結點開始的結點個數(shù)小于len個;
。4)Lb中不存在Key2的結點;
3、現(xiàn)在主要是看程序結構是不是和我們自己考慮的算法符合。
程序段(5)~(8):其中有p指針在向后移動,一直到Key1為止,因此,它們的功能就是找到指向Key1結點的指針;同時,另有一個指針prep一直在p的后面,因此它就是指向Key1的前一個結點的指針。
程序段(10)~(13):其中有一個k變量,每次循環(huán)后增加1,因此它是一個計數(shù)器。通過計數(shù)len次,就可以找到從Key1結點開始的第len個結點。這時,應該有一個指針(q)同時移動,使得這個指針就是指向第len個結點的指針。
程序段(15)~(18):其中有s指針在向后移動,一直到Key2為止,因此,它們的功能就是找到指向Key2的前一個結點的指針。
程序段(20)~(22):就是移動La中的結點到Lb,并把La中斷開的鏈表連接。從上述的分析發(fā)現(xiàn),程序結構是和我們自己考慮的算法一致的。
4、考慮細節(jié),并填空。
(1)我們的目的是找指向第len個結點的指針,找到后循環(huán)應該結束,因此,要填k
。3)這一段程序的功能是找到指向Key2的前一個結點的指針。其中s指針是指向Key2結點的,而pres指針跟在s后面。但是pres指針缺少初值,因此,這兒應該給pres賦值。故,應填:pres=Lb。
(4)程序塊(20)、(21)、(22)的功能是移動La中的結點到Lb,并把La中斷開的鏈表連接。根據(jù)鏈表操作的方法,顯然(20)是把La中斷開的鏈表連接,因此,(4)應該填:prep->next;而(21)、(22)是移動La中的結點到Lb,因此,(5)應該填:pres->next。
- 推薦給朋友
- 收藏此頁
·網(wǎng)絡工程師資料:網(wǎng)絡體系結構-軟考網(wǎng)絡類題解 (2008-4-25 14:33:38)
·計算機網(wǎng)絡基礎網(wǎng)絡拓撲結構及優(yōu)缺點分析 (2008-2-22 14:04:32)
·網(wǎng)絡工程師必知:靜態(tài)路由協(xié)議配置方法 (2008-2-22 14:03:39)
·計算機網(wǎng)絡尼奎斯特 香農(nóng)公式例題解析 (2008-2-22 14:02:35)
·軟考復習:因特網(wǎng)IP的分類、尋址規(guī)則及子網(wǎng)掩碼 (2008-2-22 13:57:21)
如果軟件水平考試網(wǎng)所轉載內容不慎侵犯了您的權益,請與我們聯(lián)系
