跳到文章开头
  1. Algorithms/

链表的基本操作

·1 分钟
代码随想录
 ·  页面点击量:

ADT模型

<--java-->
public class ListNode {
    // 结点的值
    int val;

    // 下一个结点
    ListNode next;

    // 节点的构造函数(无参)
    public ListNode() {
    }

    // 节点的构造函数(有一个参数)
    public ListNode(int val) {
        this.val = val;
    }

    // 节点的构造函数(有两个参数)
    public ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}
<--Cpp-->
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) {}
};
//
// Created by Rainy-Heights on 2024/3/20.
//
#include "../cunion.h"

/**
 * Definition for singly-linked list.
 */

class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode *dummyHead=new ListNode(0);//创建虚拟头节点
        dummyHead->next=head;//虚拟头节点的下一个节点指向头节点
        ListNode *cur=dummyHead;//当前节点,用于遍历,为了能够删除头节点,需要知道头结点的上一个节点也就是dummyHead
        //删除一般节点
        while (cur!= NULL&&cur->next!= NULL){
            if (cur->next->val==val){
                cur->next=cur->next->next;
            } else{
                cur=cur->next;
            }
        }
        head=dummyHead->next;
        delete(dummyHead);
        //删除头节点,使用虚拟节点
        return head;//返回头节点即可
    }
};
int main(){
    ListNode *node=new ListNode(0);
    ListNode *head=node;
    vector<int> v={1,2,6,3,4,5,6};
    for (int i = 0; i < 7; ++i) {
        head->val=v[i];
        cout<<v[i]<<endl;
        head->next=new ListNode;
        head=head->next;
    }
//    head->initNode(head,8);
    Solution *solution;
    ListNode *res=solution->removeElements(node,6);
    while (res->next!= NULL){
        cout<<res->val<<endl;
        res=res->next;
    }
}

相关文章

二分法
·1 分钟
代码随想录
哈希篇
·2 分钟
代码随想录
复杂度
·1 分钟
代码随想录