題目描述:刪除鍊錶中等於給定值 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...