這個是高頻的面試題,今天總結了一些。反轉鍊錶用三個指標實現,返回新鍊錶的頭節點;而從尾到頭列印,應用棧實現,返回vector整個鍊錶。
//題目描述
////
輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。
struct
listnode
};//
思路//
在反轉鍊錶的時候,我們很容易想到讓當前結點的next指向前乙個結點,
//但是這樣做了之後這個節點原本next所指的結點就找不回了,所以每次我們都要儲存新的前一結點,
//當前結點和下一結點三個指標,只要下一結點為空,那麼我們就到了原本結點的尾部,這時正是新鍊錶的頭部
class
solution
while (current != nullptr) //
當前結點不為空
current->next = pre; //
當前結點的後繼轉為前驅
pre = current; //
前驅轉為當前結點
current = pnext; //
當前結點向後移
}
return
pnewnode;
}};//
1、三個指標在鍊錶上同時滑動,比較容易想到但是編碼略複雜
class
solution
p->next = pbefore; //
完成最後乙個結點的前驅
phead->next = nullptr; //
尾結點後繼為空
return
p; }
};//
2、從原鍊錶的頭部乙個乙個取節點並插入到新鍊錶的頭部
class
solution
return
head;
}};//
使用乙個棧來解決問題,c++
#include
using
namespace
std;
class
solution
listnode * p =phead;
listnode *newhead;
stack
stack1;
while (p->next !=null)
newhead =p;
while (!stack1.empty())
p->next =null;
return
newhead;
}};//
題目描述
////
輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。
//輸入描述 :
//輸入為鍊錶的表頭
////
//輸出描述 :
//輸出為需要列印的「新鍊錶」的表頭
#includeclass
solution
//while(!nodes.empty())
//vector
dev1;
if (head !=null)
dev1.push_back(head->val);
}return
dev1;
}};class
solution
while (!stack.empty())
}return
vector;
}};/*
***從原理上來說,借助棧會使得問題的解決思路非常簡單明瞭。
*注意函式的返回型別是int型別的vector
*/class
solution
//遍歷出棧
while (!nodes.empty())
return vec; //
返回值為int型的vector
}};
offer 鍊錶反轉和從尾到頭列印鍊錶
這個是高頻的面試題,今天總結了一些。反轉鍊錶用三個指標實現,返回新鍊錶的頭節點 而從尾到頭列印,應用棧實現,返回vector整個鍊錶。題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。struct listnode 思路 在反轉鍊錶的時候,我們很容易想到讓當前結點的next指向前乙個結點,但是...
劍指offer 從尾到頭列印鍊錶(鍊錶)
輸入乙個鍊錶,按煉錶值從尾到頭的順序返回乙個arraylist。1 將鍊錶反轉,會改變鍊錶的結構,一般不採用 2 使用棧,從頭到尾讀取資料並存入棧中,輸出棧中的全部內容 3 使用遞迴實現,遞迴在本質上就是乙個棧結構,每次列印當前值時,先列印後乙個值,使用遞迴 更簡潔。但是鍊錶過長將導致遞迴呼叫過深,...
從尾到頭輸出鍊錶
題目 輸入乙個鍊錶的頭結點,從尾到頭反過來輸出每個結點的值。鍊錶結點定義如下 struct listnode 分析 這是一道很有意思的面試題。該題以及它的變體經常出現在各大公司的面試 筆試題中。看到這道題後,第一反應是從頭到尾輸出比較簡單。於是很自然地想到把鍊錶中鏈結結點的指標反轉過來,改變鍊錶的方...