每日程式設計(十六) leetcode

2021-09-11 01:14:20 字數 2536 閱讀 8358

題目描述:刪除鍊錶中等於給定值 val 的所有節點。

示例:輸入: 1->2->6->3->4->5->6, val = 6

輸出: 1->2->3->4->5

分析:一開始看題覺得特別簡單,也確實簡單,只是在提交過程中發現遺漏了多種特殊情況,只有乙個元素,該元素是指定值,或者兩個元素,都是指定值,如果不考慮就會發生越界(panic),上**看一下

**:

/**

* definition for singly-linked list.

* type listnode struct

*/func removeelements(head *listnode, val int) *listnode

if head==nil

p:=head

for p.next!=nilelse

}return head

}

題目描述:請編寫乙個函式,使其可以刪除某個鍊錶中給定的(非末尾)節點,你將只被給定要求被刪除的節點。

現有乙個鍊錶 – head = [4,5,1,9],它可以表示為:

示例 1:

輸入: head = [4,5,1,9], node = 5

輸出: [4,1,9]

解釋: 給定你鍊錶中值為 5 的第二個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 1 -> 9.

示例 2:

輸入: head = [4,5,1,9], node = 1

輸出: [4,5,9]

解釋: 給定你鍊錶中值為 1 的第三個節點,那麼在呼叫了你的函式之後,該鍊錶應變為 4 -> 5 -> 9.

分析:這個題貌似看著和上個題沒什麼區別,而且還非末尾節點,還像是更簡單了一些,但是看了**才發現他考察的點不一樣了,先看一下題目

/**

* definition for singly-linked list.

* type listnode struct

*/func deletenode(node *listnode)

細心地網友會發現,他給定的引數只有乙個節點,這個其實就是要刪除的節點,所以這次就不能用p.next=p.next.next的形式來進行節點的刪除,而是要用節點的複製,也就是說,把node的下一節點複製給node,怎麼複製呢絕對不是node=node.next,這只是指標的移動,不多說了看**:

**:

/**

* definition for singly-linked list.

* type listnode struct

*/func deletenode(node *listnode)

題目描述:給定乙個頭結點為 root 的鍊錶, 編寫乙個函式以將鍊錶分隔為 k 個連續的部分。

每部分的長度應該盡可能的相等: 任意兩部分的長度差距不能超過 1,也就是說可能有些部分為 null。

這k個部分應該按照在鍊錶**現的順序進行輸出,並且排在前面的部分的長度應該大於或等於後面的長度。

返回乙個符合上述規則的鍊錶的列表。

舉例: 1->2->3->4, k = 5 // 5 結果 [ [1], [2], [3], [4], null ]

示例 1:

輸入:root = [1, 2, 3], k = 5

輸出: [[1],[2],[3],,]

解釋:輸入輸出各部分都應該是鍊錶,而不是陣列。

例如, 輸入的結點 root 的 val= 1, root.next.val = 2, \root.next.next.val = 3, 且 root.next.next.next = null。

第乙個輸出 output[0] 是 output[0].val = 1, output[0].next = null。

最後乙個元素 output[4] 為 null, 它代表了最後乙個部分為空鍊錶。

示例 2:

輸入:root = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], k = 3

輸出: [[1, 2, 3, 4], [5, 6, 7], [8, 9, 10]]

解釋:輸入被分成了幾個連續的部分,並且每部分的長度相差不超過1.前面部分的長度大於等於後面部分的長度。

分析:將制定鍊錶分成k份,不夠用空代替,所以肯定要確定鍊錶長度,先進行計算,看每個鍊錶有多少個元素,並且餘多少個,再進行新增

**:

/**

* definition for singly-linked list.

* type listnode struct

*/func splitlisttoparts(root *listnode, k int) *listnode

if k==0

len:=0

cur:=root

for cur!=nil

nums:=len/k

rem:=len%k

for i:=0;i0

for j:=0;jtemp.next=nil

}return list

}

每日程式設計(二十六)

如果不存在下乙個更大的排列,則將數字重新排列成最小的排列 即公升序排列 必須原地修改,只允許使用額外常數空間。以下是一些例子,輸入位於左側列,其相應輸出位於右側列。1,2,3 1,3,2 3,2,1 1,2,3 1,1,5 1,5,1 分析 很明顯從後想前遍歷,直到找到乙個前面的數比後面的小,然後在...

每日程式設計(七) leetcode

題目 刪除排序鍊錶中的重複元素 題目描述 給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。上 definition for singly linked list.type listnode struct func deleteduplicates head listnode listn...

每日程式設計(八) leetcode

題目 合併兩個有序陣列 題目描述 給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為乙個有序陣列。說明 示例 輸入 nums1 1,2,3,0,0,0 m 3 nums2 2,5,6 n 3輸出 1,2,2,3,5,6 上 func mer...