力扣203. 移除链表元素

126 阅读2分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

力扣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, 10^4] 内 1 <= Node.val <= 50 0 <= val <= 50

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/re… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

  1. 这道题考察了什么思想?你的思路是什么?

    链表的题目一般来说应该都可以使用递归解决,这里我的第一想法是用递归解决。我们看这个链表,先判断它是否为空,如果为空就没必要执行删除操作了,这也是递归的终止条件。如果不为空,就判断head的值是不是等于val,如果是相等的,就需要删除head,删除head就是将head->next的值放到head。如果不相等,就保留head。

  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

    不是一次通过的,有些细节没有考虑到。

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

    还有一种使用迭代的方法删除节点。通过将该节点的next指向该节点的next.next将该节点从链表移出。

    这种解法需要注意的是,我们需要建立一个哑节点。令哑节点的next指向head,然后遍历进行删除操作。

三、AC 代码:

 /**
  * Definition for singly-linked list.
  * struct ListNode {
  *     int val;
  *     struct ListNode *next;
  * };
  */
 ​
 ​
 struct ListNode* removeElements(struct ListNode* head, int val){
     //递归的终止条件
     if(head == NULL){
         return head;
     }
 ​
     head->next = removeElements(head->next, val);
     return head->val == val ? head->next : head;
 }

image-20220326213052732

image-20220326213103668

 /**
  * 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) {
         ListNode tempHead = new ListNode(0);
         tempHead.next = head;
         ListNode t = tempHead;
         while (t.next != null) {
             if (t.next.val == val) {
                 t.next = t.next.next;
             } else {
                 t = t.next;
             }
         }
         return tempHead.next;
     }
 }

四、总结:

很正常的链表操作!得多学习!