鍊錶之反轉系列

2021-09-28 07:24:46 字數 2318 閱讀 8681

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系列之十四 反轉鍊錶

題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。思路如下 在遍歷鍊錶上的每個節點的時候,就修改其指標,當遍歷到最後乙個結點的時候,整個鍊錶就反轉完成了。所以需要建立三個變數 乙個是當前遍歷的結點,乙個是遍歷結點的前乙個結點,還有乙個是當前遍歷結點的下乙個結點。基於這種思路可以寫出如下的實現 ...