leetcode206;easy;
反轉全部的單鏈表,遞迴和非遞迴版本!
package linkedlist;
public
class
main0206反轉鍊錶 }}
// 迭代
class
solution206
return pre;}}
// 遞迴
class
solution0206
}// 反轉雙向鍊錶
class
solution00206
return pre;
}}
leetcode 92;medium;
解此題的key在於,在反轉的前後設兩個指標,用於最後的拼接!
第二種解法並無第一種解法高效!
package linkedlist;
public
class
main0092反轉鍊錶ⅱ }}
// 1 -> 2 -> 3 -> 4 -> 5 from = 2, to = 4
// pre tail con cur
class
solution92
listnode con = pre, tail = cur;
// 此時con指向反轉部分鍊錶的前乙個位置,tail指向反轉後部分鍊錶的尾部
while
(n >0)
if(pre != null)
// 反轉部分鍊錶從第乙個節點開始的
pre.next = con;
else
// 反轉部分鍊錶從第二或之後的結點開始
head = con;
tail.next = cur;
// 尾巴連線
return head;}}
// 1->2->3->4->5 from = 2, to = 4
class
solution092
public listnode reverse
(listnode head)
return pre;
}}
leetcode 25;hard;
第一種方法:不足k個反轉!
第二種方法:不足k個不反轉!
package linkedlist;
public
class
main0025k個一組翻轉鍊錶 }}
// 頭結點0 1 -> 2 -> 3 -> 4 k=3
// pre tail cur newnext
class
solution25
if(cur.next == null)
listnode tail = pre.next;
//儲存反轉後的尾結點
listnode newnext = cur.next;
//儲存反轉完後與下一部分的鍊錶連線的結點
cur.next = null;
//1.反轉的部分鍊錶後面置空
pre.next =
reverse
(tail)
;//2.反轉
tail.next = newnext;
//3.連線
pre = tail;
// 下一次準備
cur= tail;
// 下一次準備
}return dummy.next;
}public listnode reverse
(listnode head)
return pre;
}}
不足k個不反轉!
class
solution
if(end == null)
//和第一題有區別
break
; listnode start = pre.next;
listnode newnext = end.next;
end.next = null;
pre.next =
reverse
(start)
; start.next = newnext;
pre = start;
end = start;
}return dummy.next;
}public listnode reverse
(listnode head)
return pre;
}}
演算法 反轉系列
public class lc07 return int res 方法二 不用long public intreverse2 int x res temp x 10 return res public class t 44 reversesentence string word str.split ...
劍指offer系列之14 反轉鍊錶
題目描述 定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出翻轉後鍊錶的頭節點。思路 在調整節點i的m pnext指標時,除了需要知道節點i本身,還需要節點i的前乙個節點h,因為需要把節點i的m pnext指向節點h,同時還需要乙個儲存i的乙個節點j,以防止鍊錶斷開,因此需要定義三個指標,分別指向...
劍指offer系列之十四 反轉鍊錶
題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。思路如下 在遍歷鍊錶上的每個節點的時候,就修改其指標,當遍歷到最後乙個結點的時候,整個鍊錶就反轉完成了。所以需要建立三個變數 乙個是當前遍歷的結點,乙個是遍歷結點的前乙個結點,還有乙個是當前遍歷結點的下乙個結點。基於這種思路可以寫出如下的實現 ...