双链表的基本操作

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

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
但听说转正率很低,我现在有在实习了,好纠结要不要去
熬夜脱发码农:转正率低归低,但是实习的经历你可以拿着,又不是说秋招不准备了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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