首页 > 其他分享 >链表——移除链表

链表——移除链表

时间:2022-10-26 19:11:50浏览次数:58  
标签:head ListNode cur int next 链表 移除 NULL

#include<iostream>
#include<list>
using namespace std;

struct ListNode {
    int val;  // 节点上存储的元素
    ListNode* next;  // 指向下一个节点的指针
    ListNode(int x) : val(x), next(NULL) {}  // 节点的构造函数
};

// 根据数组创建链表函数
ListNode* Arr2Chain(int a[], int num)
{
    // head point
    ListNode* head = NULL;  // newand malloc 两种方式申请内存
    //tail point
    ListNode* tail = NULL;
    ListNode* add = NULL;

    for (int i = 0; i < num; ++i) 
    {
        ListNode* add = new ListNode(a[i]);
        //    TreeNode *add= (TreeNode*)malloc(sizeof(TreeNode));
        //    headd->val =a[i];
        //    headd->next =NULL;
        if (tail != NULL)
        {
            tail->next = add;
            tail = add;
        }
        else 
        {
            head = tail = add;
        }

    }
    return head;
}

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val)     // 链表移除函数
    {
        ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点,并将其值初始化为0
        dummyHead->next = head; // 将虚拟头结点指向head,这样方便后面做删除操作
        ListNode* cur = dummyHead;
        while (cur->next != NULL) 
        {
            if (cur->next->val == val) 
            {
                ListNode* tmp = cur->next;
                cur->next = cur->next->next;
                delete tmp;
            }
            else 
            {
                cur = cur->next;
            }
        }
        head = dummyHead->next;
        delete dummyHead;
        return head;
    }
};


int main() {
    int a[] = { 0,1,2,3,4,5,6,7,8,9,2,3,2 };
    int num = sizeof(a) / sizeof(a[0]);

    ListNode* head = Arr2Chain(a, num);

    Solution s;
    ListNode* m_head = s.removeElements(head, 2);
    
    while (m_head != NULL)
    {
        cout << m_head->val << "  ";
        m_head = m_head->next;
    }
    return 0;
}

标签:head,ListNode,cur,int,next,链表,移除,NULL
From: https://www.cnblogs.com/dh2021/p/16829690.html

相关文章

  • 移除元素 & 移动零
    RemoveElement题目描述​​移除元素​​​给定一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必......
  • 循环不变量,双指针,精准定义| 代码随想录算法训练营第一天| 704. 二分查找、27. 移除
    收获:抓住循环不变量双指针入门,学会精准定义目录704思路错误解法解题方法Code27思路解题方法Code704Problem:704.二分查找思路讲述看到这一题的思路思......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:合并K个升序链表
    题目:给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。 示例1:输入:lists=[[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,......
  • 1025 反转链表
    题目:给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转。例如:给定 L 为1→2→3→4→5→6,K 为3,则输出应该为3→2→1→6→5→4;如果 K 为4,......
  • 6-3 链表逆置
    本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下:structListNode*reverse(structListNode*head){structListNode*p......
  • 7-2 双向循环链表应用
    已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,实现交换p所指向的结点和它的前缀结点的顺序。#include<iostream>#defineElemTypeintusing......
  • 力扣 114. 二叉树展开为链表-原地算法(O(1) 额外空间)详解
    114.二叉树展开为链表给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:合并两个有序链表
    题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:......
  • 局部反转链表
    给你单链表的头指针head和两个整数 left和right,其中 left<=right。请你反转从位置left到位置right的链表节点,返回反转后的链表。publicListNodere......
  • JAVA--LinkedList底层双链表添加元素超详细
     集合里面存储的都是对象    添加第一个元素    添加第二个元素    依次往后添加对象/元素。   first指向linkedList集合里存储的第......