面試題6 從尾到頭列印鍊錶

2021-09-20 12:58:55 字數 1279 閱讀 1503

​ 輸入乙個鍊錶的頭節點,從尾到頭反過來列印出每個節點的值。鍊錶節點定義如下:

struct listnode

};

從尾到頭列印,能否改變原來的鍊錶?(是否允許修改輸入資料

1.能改變原來的鍊錶,將鍊錶的指標反過來。

2.使用棧(遞迴)

插入節點

//在鍊錶的尾端插入乙個節點 若煉表為空,則頭指標的值會改變 所以要使用指向指標的指標作為函式引數

void

addtotail

(listnode*

* phead,

int value)

//3.鍊錶不為空

else

pcur->m_pnext = pnew;

//節點插入鍊錶末端

}return;

}

刪除節點
//刪除鍊錶中第乙個與給定值相同的節點 當刪除的是頭節點 頭指標的值會改變 所以要使用指向指標的指標作為函式引數

void

removenode

(listnode*

* phead,

int value)

//4.刪除的不是頭節點

else

if(pcur->m_nvalue == value)

else

}//5.釋放節點記憶體

if(ptobedeleted)

return;

}

//一、使用c++中的容器stack

void

printlistreversingly_iteratively

(listnode* phead)

//3.出棧列印

while

(!nodes.

empty()

)return;}

//二、遞迴在本質上是乙個棧 遞迴實現

void

printlistreversingly_recursively

(listnode* phead)

printlistreversingly_recursively

(phead->m_pnext)

;printf

("%d\t"

,phead->m_nvalue)

;return;}

//當鍊表很長,遞迴寫法會導致函式呼叫層數過深,可能導致函式呼叫棧溢位

//用棧基於迴圈的實現**魯棒性好。

面試題6 從尾到頭列印鍊錶

一 題目 輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值。二 關鍵 後進先出 的例子,因此可以使用棧 遞迴來實現功能。三 解釋 四 其他方法 把鍊錶中的指標反轉過來。使用兩個指標,p1和p2,p1的初始值是表頭,p2的初始值是p1 next,只要p2 null,那麼就進行p1 next p2...

面試題6 從尾到頭列印鍊錶

輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist。占用記憶體 9572k public arraylist printlistfromtailtohead02 listnode listnode stack stack newstack listnode p listnode while...

面試題6 從尾到頭列印鍊錶

題目 輸入乙個鍊錶的頭結點,從尾到頭反過來列印出每個結點的值 思路 逆向輸出,如果不改變鍊錶的結構,可借助棧實現該功能,因為棧有 先進後出 的特點。include include using namespace std typedef struct listnode listnode 在末尾增加乙個...