美文网首页
链表三:链表的增删查

链表三:链表的增删查

作者: 程一刀 | 来源:发表于2021-05-27 19:41 被阅读0次

题目地址: https://leetcode-cn.com/problems/design-linked-list/

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

参考代码:

class MyLinkedList {
   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(nullptr){};
   };
   
private: ListNode *head;
         int size = 0;
public:
   MyLinkedList() {
       head =  new ListNode(0);
       size = 0;
   }
   int get(int index) {
       if (index < 0 || index >= size) { // size - 1 是 最后1个
           return  - 1;
       }
       ListNode *temp = head;
       while (index >= 0) {
           temp = temp->next;
           index --;
       }
       return  temp->val;
   }
   
   void addAtHead(int val) {
       ListNode *newData = new ListNode(val);
       newData->next = head->next;
       head->next = newData;
       size = size  + 1;
   }
   
   void addAtTail(int val) {
       ListNode *pre = head;
       ListNode *cur = head->next;
       while (cur) {
           pre = cur;
           cur = cur->next;
       }
       ListNode *newData = new ListNode(val);
       pre->next = newData;
       newData->next = cur;
       size ++;
   }
   
   void addAtIndex(int index, int val) {
       if (index < 0 || index > size) {
           return;
       }
       ListNode *pre = head;
       while (index --) { // 找到前1个
           pre = pre->next;
       }
       ListNode *newData = new ListNode(val);
       newData->next = pre->next;
       pre->next = newData;
       size ++;
   }
   
   void deleteAtIndex(int index) {
       if (index < 0 || index >= size) { // 0 - size -1 
           return;
       }
       ListNode *pre = head;
       while (index --) { // 找到前1个
           pre = pre->next;
       }
       ListNode *temp = pre->next;
       pre->next =pre->next->next;
       delete temp;
       size --;
   }
   
   void printLinkedList() {
       ListNode * cur = head;
       while (cur->next != nullptr) {
           cout << cur->next->val << " ";
           cur = cur->next;
       }
       cout << endl;
   }
   
};

参考链接: https://github.com/youngyangyang04/leetcode-master/blob/master/problems/0707.%E8%AE%BE%E8%AE%A1%E9%93%BE%E8%A1%A8.md

相关文章

  • Python实现双向链表

    Python实现双向链表的增删改查,反转链表

  • 链表三:链表的增删查

    题目地址: https://leetcode-cn.com/problems/design-linked-lis...

  • 3.循环链表

    双向链表的增删改查功能

  • 机试常用算法和题型-链表专题

    链表增删改查 链表选择排序法+找到新节点排序位置再插入 单循环链表+合并 链表查找和交换 链表如何删除最大值,排序...

  • 2.单链表

    该部分包含以下内容-单链表的增删改查-计算链表长度-逆序链表-寻找(删除)链表倒数第K个元素-逆序打印链表(使用栈)

  • 4.单链表操作

    单链表的操作,包含增删改查 定义了几个函数: 用于创建新的链表,并返回链表头 用于向已经创建的非空链表的尾部添加一...

  • Arraylist和Linkedlist

    Arraylist:底层是数组结构,增删慢改查快. Linkedlist:底层是链表结构,增删快 改查慢. Arr...

  • 线性表的静态链表

    静态链表定义 静态链表的增删

  • 手写单链表实现和LRU算法模拟

    手写单链表,实现增删改查 根据单链表操作,实现LRU算法 新数据插入到链表头部当缓存命中(即缓存数据被访问),数据...

  • 自己用单链表实现的LinkedList

    上面学习了单链表,现在我们用单链表实现LinkedList。实现LinkedList主要就是实现增删改查这几个操作...

网友评论

      本文标题:链表三:链表的增删查

      本文链接:https://www.haomeiwen.com/subject/aqmdsltx.html