当前位置:   article > 正文

119.设计链表(力扣)

119.设计链表(力扣)

代码解决 

  1. class MyLinkedList {
  2. public:
  3. // 定义链表节点结构体
  4. struct LinkedNode {
  5. int val;
  6. LinkedNode* next;
  7. LinkedNode(int val):val(val), next(nullptr){}
  8. };
  9. MyLinkedList() {
  10. dummyhead =new LinkedNode(0);
  11. size=0;
  12. }
  13. int get(int index) {
  14. if (index > (size - 1) || index < 0) {
  15. return -1;
  16. }
  17. LinkedNode*node=dummyhead->next;
  18. while(index){
  19. node=node->next;
  20. index--;
  21. }
  22. return node->val;
  23. }
  24. void addAtHead(int val) {
  25. LinkedNode*node=new LinkedNode(val);
  26. node->next=dummyhead->next;
  27. dummyhead->next=node;
  28. size++;
  29. }
  30. void addAtTail(int val) {
  31. LinkedNode*node=new LinkedNode(val);
  32. LinkedNode*cur=dummyhead;
  33. while(cur->next!=nullptr){
  34. cur=cur->next;
  35. }
  36. node->next=cur->next;
  37. cur->next=node;
  38. size++;
  39. }
  40. void addAtIndex(int index, int val) {
  41. if(index > size) return;
  42. if(index < 0) index = 0;
  43. LinkedNode* newNode = new LinkedNode(val);
  44. LinkedNode* cur = dummyhead;
  45. while(index){
  46. cur=cur->next;
  47. index--;
  48. }
  49. newNode->next=cur->next;
  50. cur->next=newNode;
  51. size++;
  52. }
  53. void deleteAtIndex(int index) {
  54. if (index >= size || index < 0) {
  55. return;
  56. }
  57. LinkedNode* newNode = dummyhead;
  58. LinkedNode* cur = dummyhead;
  59. while(index){
  60. cur=cur->next;
  61. index--;
  62. }
  63. LinkedNode* tmp = cur->next;
  64. cur->next = cur->next->next;
  65. delete tmp;
  66. tmp=nullptr;
  67. size--;
  68. }
  69. private:
  70. int size;
  71. LinkedNode* dummyhead;
  72. };
  73. /**
  74. * Your MyLinkedList object will be instantiated and called as such:
  75. * MyLinkedList* obj = new MyLinkedList();
  76. * int param_1 = obj->get(index);
  77. * obj->addAtHead(val);
  78. * obj->addAtTail(val);
  79. * obj->addAtIndex(index,val);
  80. * obj->deleteAtIndex(index);
  81. */

实现思路

当创建一个 MyLinkedList 对象时,它会初始化一个虚拟头节点 dummyhead,并将链表的大小 size 初始化为 0。链表的每个节点都包含一个整数值 val 和一个指向下一个节点的指针 next

1. 添加节点:

  • addAtHead(int val) 方法会在链表头部插入一个新节点。它创建一个新的节点,将新节点的 next 指向当前头节点,然后更新 dummyheadnext 指针为新节点,并增加链表的大小 size

  • addAtTail(int val) 方法会在链表尾部插入一个新节点。它遍历链表直到最后一个节点,然后将新节点插入到最后一个节点的后面,并增加链表的大小 size

  • addAtIndex(int index, int val) 方法会在指定索引处插入一个新节点。它遍历链表直到达到指定索引的前一个节点,然后将新节点插入到前一个节点的后面,并增加链表的大小 size

2. 获取节点:

  • get(int index) 方法会获取指定索引处节点的值。它遍历链表直到达到指定索引的节点,并返回该节点的值。

3. 删除节点:

  • deleteAtIndex(int index) 方法会删除指定索引处的节点。它遍历链表直到达到指定索引的前一个节点,然后将前一个节点的 next 指针指向要删除节点的下一个节点,并释放被删除节点的内存,最后减少链表的大小 size
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/326882?site
推荐阅读
相关标签
  

闽ICP备14008679号