為什麼感覺明明把兩個鍊錶鏈結起來了,但是實際上沒有

2022-03-29 13:28:52 字數 650 閱讀 2023

將*l2鍊錶插入到*l1鍊錶尾部(*l1, *l2均為不含頭結點的鍊錶)
1

/*將*l2鍊錶插入到*l1鍊錶尾部(*l1, *l2均為不含頭結點的鍊錶)*/2

void attach(list *l1, list *l2)

3

上面這個函式看似把l1的尾部鏈結了l2的頭部,但是實際上並沒有。因為用於鏈結的指標p並不屬於l1,只是乙個和l1尾節點的next同指向的指標,

是尾節點的next指標的拷貝,所以修改它的值並不會對l1有任何影響,所以當然沒有將兩個鍊錶鏈結在一起。

正確的做法是:將p->next作為for()迴圈的判斷條件,最終退出迴圈時p->next為空,修改p->next的指向,p->next = *l2;

這樣就能將兩個鍊錶成功鏈結在一起了,因為雖然p指標依然只是l1鍊錶的尾節點指標的乙個拷貝,p依然不屬於l1鍊錶,

但是p->next卻是屬於鍊錶的,所以修改p->next的指向就能真正對l1鍊錶產生影響,從而真正將l2連線到l1的尾部。

函式**修正如下:

1

/*將*l2鍊錶插入到*l1鍊錶尾部(*l1, *l2均為不含頭結點的鍊錶)*/2

void attach(list *l1, list *l2)

3

兩個50 的盒子為什麼放不下

設定父盒子 box sizing border box 屬性,這時盒子內容區就不受邊框影響,始終為100px 200px 但是,父盒子還是放不下 為什麼會出現這種情況呢,因為兩個子盒子之間有乙個空白文字節點,inline 和 inline block 是內聯布局,既然是內聯那麼就會受空白區域的影響 ...

呼叫函式交換兩個變數的值為什麼出錯?

include using namespace std void swap int x,int y 定義swap函式來交換兩個變數 intmain 程式執行結果 5,10 5,10 process returned 0 0x0 execution time 0.089 s press any key...

變數為什麼要分開在頭部和is部分兩個地方宣告呢?

create or replace procedure change sal v ename in varchar2,v sal in number,v job out varchar2,v dname out varchar2 is v empno emp.empno type begin end...