双链表的基本操作

来源: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;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
05-14 09:24
青岛工学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务