一個node連結串列翻轉的面試題
經典面試題總結,或者我寫的過於囉嗦, 表達了一下想法,歡迎大家來留言區討論
下面列舉了兩種解法:
題目
一個node連結串列的值分別為67,0,24,58,31,請把node翻轉
public static class Node {
int val;
Node next = null;
Node(int val) {
this.val = val;
}
}
public static void main(String[] args) {
Node nodeFirst = new Node(67);
nodeFirst.next = new Node(0);
nodeFirst.next.next = new Node(24);
nodeFirst.next.next.next = new Node(58);
nodeFirst.next.next.next.next = new Node(31);
Node node = reverseNodeByNodeMethod(nodeFirst);
while (node != null) {
System.out.println(node.val);
node = node.next;
}
}
```
一種利用node自身的方法翻轉.
public static Node reverseNodeByNodeMethod(Node nodeFirst) {
Node currentNode = nodeFirst;
Node nextNode = null;
Node nextNextNode;
Node newFirstNode = null;
if (currentNode.next != null) {
nextNode = currentNode.next;
}
currentNode.next = null;
while (nextNode != null) {
if (nextNode.next != null) {
nextNextNode = nextNode.next;
} else {
newFirstNode = nextNode;
nextNode.next = currentNode;
break;
}
nextNode.next = currentNode;
currentNode = nextNode;
nextNode = nextNextNode;
}
return newFirstNode;
}
第二種解法,將node所有節點放入stack中,為了防止造成node內部迴圈,所以在stack儲存之後將node.next置為null
public static Node reverseNodeByStack(Node nodeFirst) {
Stack<Node> stack = new Stack<>();
Node node = nodeFirst;
while (node.next != null) {
Node nextNode = node.next;
stack.push(node);
node.next = null;
node = nextNode;
}
Node newFirstNode = node;
while (!stack.isEmpty()) {
node.next = stack.pop();
node = node.next;
}
node.next = null;
return newFirstNode;
}
相關文章
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- 連結串列面試題(九)---判斷一個連結串列是否帶環面試題
- K個節點翻轉連結串列
- 連結串列面試題(一)---刪除一個無頭單連結串列的非尾結點面試題
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 連結串列面試題(七)---合併兩個有序連結串列面試題
- 連結串列專題——面試中常見的連結串列問題面試
- [leetcode 25]. K 個一組翻轉連結串列LeetCode
- 連結串列面試題(十三)---求兩個都不帶環的連結串列相交的結點面試題
- LeetCode 25. k個一組翻轉連結串列LeetCode
- 一個統一的連結串列結構 (轉)
- 翻轉連結串列常用寫法
- 連結串列面試題(十二)---判斷兩個都不帶環的連結串列是否相交面試題
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題
- 【圖解連結串列類面試題】環形連結串列圖解面試題
- 連結串列面試題(六)---刪除單連結串列倒數第k個結點面試題
- 連結串列面試題(五)---尋找連結串列的倒數第k個結點O(N)面試題
- 演算法題:反轉一個單連結串列&判斷連結串列是否有環演算法
- 面試必備的「反轉連結串列」面試
- 連結串列面試題(四)---查詢連結串列的中間節點面試題
- 連結串列面試題(十一)---求帶環單連結串列 環的入口點面試題
- LeetCode 92 | 大公司常考的面試題,翻轉連結串列當中指定部分LeetCode面試題
- 連結串列面試題(十)---求帶環單連結串列的環的長度面試題
- [每日一題] 第二題:反轉連結串列每日一題
- 連結串列面試題(三)---當前結點前插入一個資料x面試題
- java 反轉單連結串列,偶爾會遇到的面試題Java面試題
- (連結串列)連結串列的排序問題排序
- 定義一個函式,輸入一個連結串列的頭節點,反轉該連結串列並輸出反轉後連結串列的頭節點函式
- 演算法面試(一) 連結串列演算法面試
- 搞懂單連結串列常見面試題面試題
- 連結串列面試題(八)---約瑟夫環面試題
- [LeetCode] Reverse Nodes in k-Group 每k個一組翻轉連結串列LeetCode
- 面試題35:複雜連結串列的複製面試題
- 輕鬆搞定面試中的連結串列題目面試
- 玩轉演算法面試之連結串列演算法面試
- 劍指offer面試16 反轉連結串列面試
- 面試 7:快慢指標法玩轉連結串列演算法面試(一)面試指標演算法
- 面試中必知必會的那些題——第一題 單連結串列倒置面試