双链表的基本操作

来源:www.rxwcv.cn

双向链表的数据结构

struct ListNode {
    int val;
    struct ListNode *pre;
    struct ListNode *next;
    ListNode(int x) :
        val(x), pre(NULL), next(NULL) {
    }
}; 

双向链表的初始化

ListNode* createList() {
    ListNode* head = new ListNode(-1);
    ListNode* node = head;
    vector<int> nums = { 1,2,3 };
    for (int i = 0; i < nums.size(); ++i) {
        ListNode* temp = new ListNode(nums[i]);
        node->next = temp;
        temp->pre = node;
        node = node->next;
    }
    return head;
}

双向链表插入元素

ListNode* insertNode(ListNode* head, int pos, int elem) {
    ListNode* node = head;
    int i = 0;
    while (node->next && i < pos - 1) {
        node = node->next;
        ++i;
    }
    if (!node || i > pos - 1) {
        cout << "插入失败!" << endl;
        return node;
    }
    ListNode* temp = new ListNode(elem);
    node->next->pre = temp;
    temp->next = node->next;
    node->next = temp;
    temp->pre = node;
    return head;
}

双向链表删除指定元素

ListNode* deleteNode(ListNode* head, int pos) {
    ListNode* node = head;
    int i = 0;
    while (node->next && i < pos - 1) {
        node = node->next;
        ++i;
    }
    if (!node || i > pos - 1) {
        cout << "删除失败!" << endl;
        return head;
    }
    ListNode* del = node->next;
    node->next = del->next;
    del->next->pre = node;
    delete del;
    del = nullptr;
    return head;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务