第一題:刪除鏈表中的節(jié)點
請編寫一個函數(shù)并村,使其可以刪除某個鏈表中給定的(非末尾)節(jié)點倡勇,你將只被給定要求被刪除的節(jié)點华匾。
現(xiàn)有一個鏈表 -- head = [4,5,1,9]洽故,它可以表示為:
示例 1:
輸入: head = [4,5,1,9], node =5輸出: [4,1,9]解釋: 給定你鏈表中值為5的第二個節(jié)點便贵,那么在調(diào)用了你的函數(shù)之后槽奕,該鏈表應(yīng)變?yōu)?->1->9.
示例 2:
輸入: head = [4,5,1,9], node =1輸出: [4,5,9]解釋: 給定你鏈表中值為1的第三個節(jié)點芳撒,那么在調(diào)用了你的函數(shù)之后看峻,該鏈表應(yīng)變?yōu)?->5->9.
說明:
鏈表至少包含兩個節(jié)點阶淘。
鏈表中所有節(jié)點的值都是唯一的。
給定的節(jié)點為非末尾節(jié)點并且一定是鏈表中的一個有效節(jié)點互妓。
不要從你的函數(shù)中返回任何結(jié)果溪窒。
public class Solution
{
? ? public void DeleteNode(ListNode node)
? ? {
? ? ? ? ListNode temp = node.next;
? ? ? ? while (temp != null)
? ? ? ? {
? ? ? ? ? ? node.val = temp.val;
? ? ? ? ? ? temp = temp.next;
? ? ? ? ? ? if (temp != null)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? node = node.next;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? node.next = null;
? ? }
}
第二題:除自身以外數(shù)組的乘積
給定長度為 n 的整數(shù)數(shù)組 nums坤塞,其中 n > 1,返回輸出數(shù)組 output澈蚌,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘積摹芙。
示例:
輸入: [1,2,3,4]輸出: [24,12,8,6]
說明: 請不要使用除法,且在 O(n) 時間復(fù)雜度內(nèi)完成此題宛瞄。
進(jìn)階:
你可以在常數(shù)空間復(fù)雜度內(nèi)完成這個題目嗎凡伊?( 出于對空間復(fù)雜度分析的目的赞枕,輸出數(shù)組不被視為額外空間装哆。)
public class Solution
{
? ? public int[] ProductExceptSelf(int[] nums)
? ? {
? ? ? ? int len = nums.Length;
? ? ? ? int[] output1 = new int[len];//正向乘積
? ? ? ? int[] output2 = new int[len];//反向乘積
? ? ? ? output1[0] = 1;
? ? ? ? output2[len - 1] = 1;
? ? ? ? for (int i = 1; i < len; i++)
? ? ? ? {
? ? ? ? ? ? output1[i] = output1[i - 1]*nums[i - 1];
? ? ? ? ? ? output2[len - i - 1] = output2[len - i]*nums[len - i];
? ? ? ? }
? ? ? ? for (int i = 0; i < len; i++)
? ? ? ? {
? ? ? ? ? ? output1[i] *= output2[i];
? ? ? ? }
? ? ? ? return output1;
? ? }
}
第三題:Nim 游戲
你和你的朋友台颠,兩個人一起玩 Nim 游戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭裸影。 拿掉最后一塊石頭的人就是獲勝者挣轨。你作為先手。
你們是聰明人轩猩,每一步都是最優(yōu)解卷扮。 編寫一個函數(shù),來判斷你是否可以在給定石頭數(shù)量的情況下贏得游戲均践。
示例:
輸入:4輸出:false解釋: 如果堆中有4塊石頭晤锹,那么你永遠(yuǎn)不會贏得比賽;? ? 因為無論你拿走1塊彤委、2塊 還是3塊石頭鞭铆,最后一塊石頭總是會被你的朋友拿走。
public class Solution
{
? ? public bool CanWinNim(int n)
? ? {
? ? ? ? return (n % 4 != 0);
? ? }
}