zoukankan      html  css  js  c++  java
  • 203. Remove Linked List Elements【easy】

    203. Remove Linked List Elements【easy】

    Remove all elements from a linked list of integers that have value val.

    Example
    Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
    Return: 1 --> 2 --> 3 --> 4 --> 5

    Credits:
    Special thanks to @mithmatt for adding this problem and creating all test cases.

     解法一:

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* removeElements(ListNode* head, int val) {
    12         if (head == NULL) {
    13             return head;
    14         }
    15         
    16         ListNode * dummy = new ListNode(INT_MIN);
    17         dummy->next = head;
    18         head = dummy;
    19         
    20         while (head != NULL && head->next != NULL) {
    21             if (head->next->val == val) {
    22                 while (head->next != NULL && head->next->val == val) {
    23                     ListNode * temp = head->next;
    24                     free(temp);
    25                     head->next = head->next->next;                    
    26                 }
    27             }
    28             else {
    29                 head = head->next;
    30             }
    31         }
    32         
    33         return dummy->next;
    34     }
    35 };

    里面的while可以不用,因为这个题和(82. Remove Duplicates from Sorted List II)不一样,那个题你根本不知道val是什么,所以只用一个if是不行的。但是这个题你知道val是什么,所以可以省略里面的while。

    解法二:

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     ListNode* removeElements(ListNode* head, int val) {
    12         if (head == NULL) {
    13             return head;
    14         }
    15         
    16         ListNode * dummy = new ListNode(INT_MIN);
    17         dummy->next = head;
    18         head = dummy;
    19         
    20         while (head != NULL && head->next != NULL) {
    21             if (head->next->val == val) {
    22                 ListNode * temp = head->next;
    23                 free(temp);
    24                 head->next = head->next->next;                    
    25             }
    26             else {
    27                 head = head->next;
    28             }
    29         }
    30         
    31         return dummy->next;
    32     }
    33 };

    精简写法

    解法三:

    1 public ListNode removeElements(ListNode head, int val) {
    2         if (head == null) return null;
    3         head.next = removeElements(head.next, val);
    4         return head.val == val ? head.next : head;
    5 }

    递归,参考了@renzid 的代码

     
  • 相关阅读:
    【POJ】1204 Word Puzzles
    【POJ】1816 Wild Words
    【HDOJ】1247 Hat’s Words
    【HDOJ】2609 How many
    【POJ】1035 Spell checker
    【POJ】2418 Hardwood Species
    【POJ】1056 IMMEDIATE DECODABILITY
    数列有序!
    绝对值排序
    C语言合法标识符
  • 原文地址:https://www.cnblogs.com/abc-begin/p/7667697.html
Copyright © 2011-2022 走看看