LeetCode203.移除链表元素🌟🌟🌟🌟🌟简单

问题描述

原文链接:203. 移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回新的头节点 。

示例 1:

img

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

示例 2:

输入:head = [], val = 1
输出:[]

示例 3:

输入:head = [7,7,7,7], val = 7
输出:[]

提示:

  • 列表中的节点数目在范围 [0, 104]
  • 1 <= Node.val <= 50
  • 0 <= val <= 50

思路讲解

代码实现

Java

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        // 删除头节点
        while(head != null && head.val == val){
            head = head.next;
        }

        if(head == null){
            return head;
        }

        ListNode cur = head.next;
        ListNode pre = head;
        while(cur != null){
            if(cur.val == val){
                pre.next = cur.next; 
            }else{
                pre = cur;
            }
            cur = cur.next;
        }

        return head;
    }
}
Java

Python

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

class Solution(object):
    def removeElements(self, head, val):
        """
        :type head: ListNode
        :type val: int
        :rtype: ListNode
        """
        # 删除头节点
        while(head != None and head.val == val):
            head = head.next

        if(head == None):
            return head

        cur = head.next
        pre = head
        while(cur != None):
            if(cur.val == val):
                pre.next = cur.next 
            else:
                pre = cur
            cur = cur.next

        return head

Python

C++

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        // 删除头节点
        while(head != nullptr && head->val == val){
            head = head->next;
        }

        if(head == nullptr){
            return head;
        }

        ListNode* cur = head->next;
        ListNode* pre = head;
        while(cur != nullptr){
            if(cur->val == val){
                pre->next = cur->next; 
            }else{
                pre = cur;
            }
            cur = cur->next;
        }

        return head;
    }
};

C++

Go

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func removeElements(head *ListNode, val int) *ListNode {
    // 删除头节点
    for head != nil && head.Val == val {
        head = head.Next
    }

    if head == nil {
        return head
    }

    cur := head.Next
    pre := head
    for cur != nil {
        if cur.Val == val {
            pre.Next = cur.Next
        } else {
            pre = cur
        }
        cur = cur.Next
    }

    return head
}


Go

发表评论

后才能评论