給乙個鍊錶和乙個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 輸出 ...