首页 > 其他分享 >线性表

线性表

时间:2023-05-10 22:01:52浏览次数:31  
标签:head ListNode cur val int next 线性表

顺序表的存、读数据时的时间复杂度为o(1);

插入删除时的时间复杂度为o(n);

比较适合元素个数不太变化的应用

链表的定义

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

 

单链表

/**  * 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 != NULL && head->val == val) {              ListNode* tmp = head;             head = head->next;             delete tmp;         }
        // 删除非头结点         ListNode* cur = head;              //单链表的头结点是一个独立的内存,创建临时结点是为了修改后面的结点,而遍历时还需要从头结点开始,所有不能直接改变头节点的值         while (cur != NULL && cur->next!= NULL) {             if (cur->next->val == val) {                 ListNode* tmp = cur->next;                 cur->next = cur->next->next;                 delete tmp;             } else {                 cur = cur->next;             }         }         return head;
    } };   添加链表结点

 1、若令C为p,D为p->next,F为s则

s->next=p_next;

p-next=s;

顺序不能改变,因为如果我们先改变p的指向,则s无法找到p->next的地址,就会变成s->next=s;

 

在堆区开辟空间new

int* a=new int(10) 

返回的是指针

int *a=new int[10]

开辟数组,返回的是首地址

while(cur)

while里面存在指针,当指针为空时,退出循环

 

 

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

//递归写法

class Solution {
public:
    ListNode* reverse(ListNode* pre,ListNode* cur)
    {
        if(cur==NULL) return pre;
        ListNode* tmp=cur->next;
        cur->next=pre;

        return reverse(cur,tmp);
    }

    ListNode* reverseList(ListNode* head) {
        return reverse(NULL,head);//返回的是头结点
    }
};

 

 

 

标签:head,ListNode,cur,val,int,next,线性表
From: https://www.cnblogs.com/gaishuobulao/p/17342052.html

相关文章

  • 学校数据结构实验_线性表:纯C语言版
    首先分别声明链表和顺序表的结构单位,  1:插入实现:顺序表插入比较简单,直接访问下表找到插入位置,然后移动所有后面的数据将插入的位置空出来,然后将需要插入的数据插入,链表的插入:因为一般链表都是调用头插或者尾插,但是为了和顺序表相比较,再插入的时候增加了随机位置......
  • 9. 线性表概念
    线性表1.1概念简介线性表(简称表),是一种抽象的数学概念,是一组元素的序列的抽象,它由有穷个元素组成(0个或任意个)顺序表:使用一大块连续的内存顺序存储表中的元素,这样实现的表称为顺序表,或称连续表在顺序表中,元素的关系使用顺序表的存储顺序自然地表示链接表:在存储空间......
  • 【数据结构】线性表分类以及顺序型存储结构
    1 什么是线性表线性表的定义:由零个或多个数据元素组成的有限序列首先它是一个序列,也就是说元素之间是有先来后到之分。若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。线性表强调是有限的,事实上无论计算机发展到多强大,他所能处理......
  • 逻辑结构之一线性表
    1.线性表的定义线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n=0时是一个空表。若用L命名线性表,则其一般表示为L=(a1,a2,…, ai,ai+1,…,an),式中a1称为表头元素,有且仅有一个直接后继,an称为表尾元素有且仅有一个直接前驱,其他元素有且仅有一个直接后继和一......
  • 数据结构之“线性表(数组)”
    前言:线性表:几个具有相同特性的数据元素的有限序列,线性表在逻辑上是线性结构,也就是连续的一条直线顾名思义“线性表”成一条线的表,在IT领域的数据结构中也有很多能看到的线性表,如“人员花名册”,“网络商品”,“图书名单系统”等等,都是一个个信息紧跟着排好供我们选择浏览等等~但这些......
  • 线性表
    //sqlist/h#ifndef_SQLIST_H_#define_SQLIST_H_typedefintdata_t;#defineN128typedefstruct{data_tdata[N];intlast;}sqlist,*sqlink;sqlinklist_create();intlist_destroy(sqlinkL);intlist_clear(sqlinkL);intlist_empty(sqlink......
  • 线性表之单链表
    定义初始化单链表尾插法建立单链表--正向建立单链表头插法建立单链表单链表的查找按位查找,返回第i个元素(带头结点)按值查找,找到元素值为x的点......
  • 线性表之静态链表实现(数组cur实现)
    main.cpp#include"StaticList.h"intmain(){StaticListSL;InitSList(SL);for(inti=0;i<5;++i){Insert(SL,'A'+i);}ShowSList(SL);DeleteSList(SL);ShowSList(SL);return0;}Stati......
  • 线性表之单循环链表实现
    main.cpp#include"SCList.h"intmain(){Listmylist;InitList(mylist);intselect=1;ElemTypeItem;Node*p=NULL;while(select){printf("************************************\n");printf("......
  • 合并有序线性表
    一看就懂的合并有序线性表源码把合并后的线性表放到新创建的第三个线性表中两个表的长度可能会不一样,所以一个表比较完了,另一个表可能没比较完,但两个表中的每个元素肯定都互相比较了一次,所以小的元素已经全部放到了前边,没比较完的那个表直接加在新表的后面就行SqlistA=[1,2......