首页 > 其他分享 >707. 设计链表

707. 设计链表

时间:2022-12-13 12:00:25浏览次数:39  
标签:index Listnode cur val 707 next 链表 设计

设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 nextval 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。

在链表类中实现这些功能:

  • get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1
  • addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
  • addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
  • addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val  的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
  • deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点

 

示例:

MyLinkedList linkedList = new MyLinkedList();
linkedList.addAtHead(1);
linkedList.addAtTail(3);
linkedList.addAtIndex(1,2);   //链表变为1-> 2-> 3
linkedList.get(1);            //返回2
linkedList.deleteAtIndex(1);  //现在链表是1-> 3
linkedList.get(1);            //返回3
 1 struct Listnode{
 2     int val;
 3     Listnode* next;
 4     Listnode() : val(0), next(nullptr) {}
 5     Listnode(int x) : val(x), next(nullptr) {}
 6     Listnode(int x, Listnode* next) : val(x), next(next) {}
 7 };
 8 class MyLinkedList {
 9     struct Listnode* head;
10     int size;
11 public:
12     MyLinkedList() {
13         head = new Listnode();
14         size = 0;
15     }
16     
17     int get(int index) {
18         if(index> size-1||index<0) return -1;
19         Listnode* cur = head;
20         for(int i = 0; i <= index ; i++ )
21         {
22             cur = cur->next;
23         }
24         return cur->val;
25     }
26     
27     void addAtHead(int val) {
28         Listnode* cur = head->next;
29         Listnode* dummy_head = new Listnode(val,cur);
30         head->next = dummy_head;
31         size++;
32         return;
33     }
34     
35     void addAtTail(int val) {
36         Listnode* cur = head;
37         while(cur->next)
38         {
39             cur = cur->next;
40         }
41         Listnode *newnode = new Listnode(val);
42         cur->next = newnode;
43         size++;
44         return;
45     }
46     
47     void addAtIndex(int index, int val) {
48         Listnode* cur = head;
49         if(index>size) return;
50         if(index<0)
51         {
52             addAtHead(val);
53             return;
54         }
55         if(index==size)
56         {
57             addAtTail(val);
58             return;
59         }
60         for(int i = 0; i < index; i++)
61         {
62             cur = cur->next;
63         }
64         Listnode* newnode = new Listnode(val,cur->next);
65         cur->next = newnode;
66         size++;
67         return;
68     }
69     
70     void deleteAtIndex(int index) {
71         if(index<0||index>size-1) return;
72         Listnode* pre = head;
73         for(int i = 0; i <index; i++)
74         {
75             pre = pre->next;
76         }
77         Listnode* cur = pre->next;
78         pre->next=cur->next;
79         delete cur;
80         size--;
81         return;
82     }
83 };
84 /**
85  * Your MyLinkedList object will be instantiated and called as such:
86  * MyLinkedList* obj = new MyLinkedList();
87  * int param_1 = obj->get(index);
88  * obj->addAtHead(val);
89  * obj->addAtTail(val);
90  * obj->addAtIndex(index,val);
91  * obj->deleteAtIndex(index);
92  */

 

标签:index,Listnode,cur,val,707,next,链表,设计
From: https://www.cnblogs.com/lihaoxiang/p/16978191.html

相关文章

  • 设计模式之美--单例模式
    单例模式的几个实现方式:实现递增id生成器饿汉式/***饿汉式(不支持延迟加载)*@authorlq*@version:IdGenerator.java,v0.12022年12月13日10:19lqExp$......
  • 环形链表II
    题目地址(142.环形链表II)​​https://leetcode-cn.com/problems/linked-list-cycle-ii/​​题目描述给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回nu......
  • 如何将dxf或dwg等CAD文件与卫星影像地图叠加进行绘图设计?
    引言:在测绘、电力、水利、规划或道路设计等GIS相关行业中,通常会用AutoCAD进行矢量地图数据的绘制,而这些地图数据通常又是建立在投影平面坐标的基础上进行绘制的。为了确......
  • 【《硬件架构的艺术》读书笔记】05 低功耗设计(1)
    5.1介绍能量以热量形式消耗,温度升高芯片失效率也会增加,增加散热片或风扇会增加整体重量和成本,在SoC级别对功耗进行控制就可以减少甚至可能消除掉这些开支,产品也更小更便......
  • 设计模式之工厂设计模式
    1.开发环境IDEA版本:2022.1.4JDK版本:17.0.3 2.模式由来2.1自定义MailSender类2.2自定义Computer类2.3分析图2.4案例分析由于Computer类和MailSender......
  • 使用DevExpress WPF主题设计器轻松创建Office 2019绿色主题(二)
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专......
  • 设计模式-策略模式
    设计模式-策略模式  代码写作过程中,设计模式是对某些固定场景代码写作的总结和优化,最常见的设计模式,除了单例模式外,还有工厂模式和策略模式。 工厂模式是一种创建型......
  • MongoDB - 数据模型的设计模式
    简介官方文章的地址是BuildingwithPatterns:ASummary,其中汇总了12种设计模式及使用场景。上述的图表列举了12种设计模式及应用场景,主要是以下这些:近似值模式......
  • 优雅的API接口设计
    前言在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用。那么问题来了,如果设计一个优雅的API接口,能够满足:安全......
  • C/C++小商品信息管理系统设计与实现
    C/C++小商品信息管理系统设计与实现设计一个小商品信息管理系统。根据以下功能,分析使用的逻辑结构和存储结构。(1)增加功能:能录入新数据(包括:商品名称、商品编号、厂家、库......