1. 程式人生 > >LeetCode【203.移除連結串列的元素】

LeetCode【203.移除連結串列的元素】

題目描述

刪除連結串列中等於給定值val的所有節點。

示例

輸入1>2>6>3>4>5>6,val=61->2->6->3->4->5->6, val = 6
輸出1>2>3>4>51->2->3->4->5

思路 * 1
申請一個頭結點cur,並使用一個變數dummpy指向其初始的位置,curhead同時向前遍歷,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; } }

複雜度分析

  • 時間複雜度:ONO(N)
  • 空間複雜度:O1O(1)

思路 * 2
還是可以將上面的思路改成遞迴的思路,很是簡便的程式碼量(但是資料量過大時,會造成棧的溢位)。

程式碼 * 2

 if (head == null) return null;
        head.next = removeElements(head.next, val);
        return head.val == val ? head.next : head;

複雜度分析

  • 時間複雜度:ONO(N)
  • 空間複雜度:ONO(N)

完整程式碼

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);
        }
    }
}

相關推薦

LeetCode203.連結串列元素

題目描述 刪除連結串列中等於給定值val的所有節點。 示例: 輸入: 1−&gt;2−&gt;6−&gt;3−&gt;4−&gt;5−&gt;6,val=61-&gt;2-&gt;6-&g

LeetCode203. 連結串列元素

運用的知識:連結串列   參考:自定義連結串列 題目描述: 刪除連結串列中等於給定值 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->