2道鍊錶反轉leetcode25 234

2021-10-05 09:16:19 字數 1355 閱讀 3332

給乙個鍊錶和乙個k,每k個結點反轉一次,最後一組如果沒有k個就不反轉了

given this linked list: 1->2->3->4->5

for k = 2, you should return: 2->1->4->3->5

for k = 3, you should return: 3->2->1->4->5

先遍歷一遍找鍊錶長度len

之後每k個結點一迴圈,進行反轉,反轉時每次要記住乙個新的頭結點,反轉完成後將len-k

如果剩餘的len < k 則反轉結束

public listnode reversekgroup

(listnode head,

int k)

listnode tail = head;

listnode newhead =

newlistnode(0

);newhead.next = head;

listnode everyhead = newhead;

//每組的頭結點

while

(tail != null && len >= k)

len -= k;

everyhead = tail;

//每組迴圈結束後,將該組最後乙個結點設為下一組的頭結點

tail = tail.next;

}return newhead;

}

判斷乙個鍊錶是否是回文結構

設定3個結點,都指向頭

其中乙個每次走1步,乙個每次走2步,遍歷一遍可以找到中點

所以現在有乙個指向頭的指標和乙個指向中點的指標,之後有兩種解法

第一種就是直接將其中乙個鍊錶反轉,再和另乙個鍊錶一一對比即可。這種方法雖然空間複雜度是o(1),但會破壞鍊錶結構

第二種方法用遞迴,將指向中點的指標遞迴到鍊錶尾端,然後遞迴的和指向頭結點的鍊錶比較。這種方法不會破壞鍊錶結構,但空間複雜度是o(n),**是這種方法

時間複雜度都是o(n)

listnode first = null;

public

boolean

ispalindrome

(listnode head)

//last不為空說明長度是奇數,second在中點,所以前進乙個

if(last != null) second = second.next;

return

issame

(second);}

public

boolean

issame

(listnode second)

return mark;

}

leetcode(2) 整數反轉

對應leetcode第7道題目。給出乙個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 231,231 請根據這個假設,如果反轉後整數溢位那麼就返回 0。官方的解題思路為彈出和推入。python實現思路 當輸入的是負數...

leetcode 2 兩數相加(鍊錶)

給出兩個非空的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存一位數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 7 0 8 ...

leetcode 2 兩數相加(鍊錶)

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...