您现在的位置是:首页 >其他 >leetcode 707. Design Linked List设计链表网站首页其他

leetcode 707. Design Linked List设计链表

马闻哲_Nic 2025-04-18 12:01:02
简介leetcode 707. Design Linked List设计链表

这道题虽然是基础的数据结构实现,但体现了:

  • 面向对象的基本原则(封装、构造函数设计)
  • 指针操作的准确性
  • 边界条件的完整处理

Node的设计:

关键点:

1. 使用 struct 而不是 class,因为链表节点主要是承载数据,不需要封装。

2. 提供两个构造函数,方便节点创建

3. 使用初始化列表,良好的 C++ 编程习惯

struct Node {
    int val;
    Node* next;
    Node() : val(0), next(nullptr) {};
    Node(int i, Node* ptr) : val(i), next(ptr) {};
};

MyLinkedList :

class MyLinkedList {
private:
    Node* head;
public:
    MyLinkedList():head(nullptr) {};
    MyLinkedList(Node* n): head(n) {};

    int get(int index) {
        if (index < 0) return -1;
        Node* pre = head;
        while (index > 0 && pre) {
            index--;
            pre = pre->next;
        }
        if (pre == nullptr) return -1;
        return pre->val;
    }

    void addAtHead(int val) {
        Node* newHead = new Node(val,head);
        head = newHead;
    }

    void addAtTail(int val) {
        Node* newNode = new Node(val,nullptr);
        if (!head) {
            head = newNode;
            return;
        } 
        Node* cur = head;
        while (cur->next) {
            cur = cur->next;
        }
        cur->next = newNode;
    }

    void addAtIndex(int index, int val) {
        if (index == 0) {
            addAtHead(val);
            return;
        }
        if (index < 0) return;
        Node* curr = head;
        while (index > 1 && curr) {
            index--;
            curr = curr->next;
        }
        if (!curr) return;
        Node* newNode = new Node(val,curr->next);
        curr->next = newNode;
    }

    void deleteAtIndex(int index) {
        if (!head) return;
        if (index == 0) {
            Node* temp = head;
            head = head->next;
            delete temp;
            return;
        }
        Node* curr = head;
        while (index > 1 && curr) {
            index--;
            curr = curr->next;
        }
        if (!curr || !curr->next) return;
        Node* temp = curr->next;
        curr->next = temp->next;
        delete temp;
    }
};

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。