LeetCode【203.移除連結串列的元素】
題目描述
刪除連結串列中等於給定值val的所有節點。
示例:
輸入:
輸出:
思路 * 1:
申請一個頭結點cur,並使用一個變數dummpy指向其初始的位置,cur 和 head同時向前遍歷,head總比cur要快一個結點。當head中結點的值達到要求時(即head.val = val),使較慢的cur.next直接指向head的下一個結點(當然也可以是null),此時cur不用繼續向前,head向前一步後,通過達到的結點後,cur繼續向前。最終返回dummpy.next即可。
程式碼 * 1:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode cur = new ListNode(-1);
ListNode dummpy = cur;
while(head != null) {
if(head.val == val) {
cur.next = head.next;
}else {
cur.next = head;
cur = cur.next;
}
head = head.next;
}
return dummpy.next;
}
}
複雜度分析
- 時間複雜度:
- 空間複雜度:
思路 * 2
還是可以將上面的思路改成遞迴的思路,很是簡便的程式碼量(但是資料量過大時,會造成棧的溢位)。
程式碼 * 2
if (head == null) return null;
head.next = removeElements(head.next, val);
return head.val == val ? head.next : head;
複雜度分析
- 時間複雜度:
- 空間複雜度:
完整程式碼:
package leetcode203;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Created by 張超帥 on 2018/10/7.
*/
class ListNode {
int val;
ListNode next;
ListNode( int val) {this.val = val;}
}
class Solution {
public ListNode removeElements(ListNode head, int val) {
/*ListNode cur = new ListNode(-1);
ListNode dummpy = cur;
while(head != null) {
if(head.val == val) {
cur.next = head.next;
}else {
cur.next = head;
cur = cur.next;
}
head = head.next;
}
return dummpy.next;
*/
if (head == null) return null;
head.next = removeElements(head.next, val);
return head.val == val ? head.next : head;
}
}
public class leetcode203 {
public static int[] stringToArrays(String input) {
input = input.trim();
input = input.substring(1,input.length() - 1);
if(input == null){
return new int[0];
}
String [] parts = input.split(",");
int[] res = new int[parts.length];
for(int i = 0; i < parts.length; i ++) {
res[i] = Integer.parseInt(parts[i].trim());
}
return res;
}
public static ListNode stringToListNode(String input) {
int[] nodes = stringToArrays(input);
ListNode cur = new ListNode(-1);
ListNode dummpy = cur; // 不能寫成 ListNode dummpy = cur.next;
for(int node : nodes) {
cur.next = new ListNode(node);
cur = cur.next;
}
System.out.println(dummpy.next.val);
return dummpy.next;
}
public static String listnodeTostring(ListNode head) {
if(head == null) return "[]";
String res = "";
while(head != null) {
res += head.val + ", ";
head = head.next;
}
return "[" + res.substring(0, res.length() - 2) + "]";
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader( new InputStreamReader(System.in));
String line ;
while((line = in.readLine()) != null) {
ListNode head = stringToListNode(line);
int num = Integer.parseInt(in.readLine());
ListNode ret = new Solution().removeElements(head, num);
String result = listnodeTostring(ret);
System.out.println(result);
}
}
}
相關推薦
LeetCode【203.移除連結串列的元素】
題目描述 刪除連結串列中等於給定值val的所有節點。 示例: 輸入: 1−>2−>6−>3−>4−>5−>6,val=61->2->6-&g
LeetCode之203. 移除連結串列元素
運用的知識:連結串列 參考:自定義連結串列 題目描述: 刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->
【java筆記】Leetcode 203.移除連結串列元素
刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5 public class Solution { p
Leetcode:203 移除連結串列元素
刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->
Leetcode 203. 移除連結串列元素(Python3)
203. 移除連結串列元素 刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5 可以用遞迴也可以用
203,移除連結串列元素
刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5 /** * Defi
領釦——203.移除連結串列元素
領釦——203.移除連結串列元素 刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5 /** * Defin
203. 移除連結串列元素
刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5 package leetcode; publ
203 移除連結串列元素
ListNode *removeElements(ListNode *head, int val) { if (head == nullptr) return head; auto *prehead = new ListNode(-1);
【LeetCode 簡單題】53-移除連結串列元素
宣告: 今天是第53道題。刪除連結串列中等於給定值 val 的所有節點。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除 (手動比心ღ( ´・ᴗ・` )) 正文
LeetCode演算法題203:移除連結串列元素解析
刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5 這個題應該是比較簡單了,但是條件還是得稍微多想想,首先如果是空連
LeetCode 203.Remove Linked List Elements (移除連結串列元素)
題目描述: 刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5 AC C++ S
leetcode 203. Remove Linked List Elements-移除連結串列元素
【思路】 思路很簡單,遍歷連結串列,如果節點的值等於 val,那麼就將節點移除。這裡新增加一個節點,是為了防止頭結點和 val 相等時無法移除的情況: public ListNode re
LeetCode 203:移除連結串列元素 Remove LinkedList Elements
刪除連結串列中等於給定值 val 的所有節點。 Remove all elements from a linked list of
LeetCode#203-Remove Linked List Elements-移除連結串列元素
一、題目 刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5 二、題解 解法1:哨兵節點。 初始化一個哨兵節點 solider,並將其 n
移除連結串列元素(leetcode簡單篇二百零三題)
刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5 struct ListNode* remove
[LeetCode] Remove Linked List Elements 移除連結串列元素
Remove all elements from a linked list of integers that have value val. Example Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val =
移除連結串列元素
刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5/** * Definition for singly-li
LeetCode_203. 移除連結串列元素
public class S_203 { public ListNode removeElements(ListNode head, int val) { // 為空 if (head == null) return null;
LeetCode203. 移除連結串列元素
題目來源: https://leetcode-cn.com/problems/remove-linked-list-elements/description/ 題目描述: 刪除連結串列中等於給定值 val 的所有節點。 示例: 輸入: 1->2->