题解 | #【模板】链表#

【模板】链表

https://www.nowcoder.com/practice/97dc1ac2311046618fd19960041e3c6f

  • 因为是前插,所以遍历时要找到下一个节点值为x的节点,用cur记录下来,然后p指向新插入的节点,新插入的节点再指向p的next,同时要注意处理尾节点插入的状况,直接插入。
  • 删除操作,直接跳过要删除的那个节点,并用delete安全删除

#include <iostream>
#include <string>
#include <vector>
using namespace std;

struct ListNode{
    int val;
    ListNode* next;
    ListNode(int x):val(x){}
};
void insert(ListNode* pHead,int x,int y){//函数参数:当前链表pHead,插入位置x,插入的值y
    // ListNode* cur = pHead;
    ListNode* p = pHead;
    while (p!=nullptr&&p->next) {
        if(p->next->val==x){
            ListNode* add = new ListNode(y);
            ListNode* cur = p->next;
            p->next = add;
            add->next = cur;
            return;
        }
        p = p->next;
    }
    // 处理链表末尾插入新节点的情况
    ListNode* add = new ListNode(y);
    p->next = add;
    add->next = nullptr;
}
void del(ListNode* pHead,int x){
    ListNode* p = pHead;
    while (p->next&&p!=nullptr) {
        if(p->next->val==x){
            ListNode* temp = p->next;
            p->next = p->next->next;
            delete temp;
            return;
        }
    p = p->next;
    }
}

int main() {
    int n;
    cin>>n;
    ListNode* head = new ListNode(0);
    ListNode* p = head;  // 创建一个额外的指针来遍历链表
    for(int i = 0; i < n; i++)
    {
        string op;
        cin>>op;
        if(op == "insert")
        {
            int x, y;
            cin>>x>>y;
            insert(head, x, y);
        }
        if(op == "delete")
        {
            int x;
            cin>>x;
            del(head, x);
        }
    }
    if (head->next == nullptr) {  // 检查链表是否为空
        cout << "NULL";
    }
    
    p = head->next;  // 操作完后,将指针指向链表的第一个节点
    while (p != nullptr) {  // 遍历链表并输出节点的值
        cout << p->val << " ";
        p = p->next;
    }
    
    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
09-10 14:32
点赞 评论 收藏
分享
xiaolihuam...:当然还有一种情况是你多次一面挂,并且挂的原因都比较类似,例如每次都是算法题写不出来。面试官给你的评价大概率是算法能力有待加强,算法能力有待提高,基础知识掌握的不错,项目过关,但是coding要加强。短期内高强度面试并且每次都是因为同样的原因挂(这个你自己肯定很清楚),会形成刻板印象,因为你偶尔一次算法写不出来,面试官自己也能理解,因为他清楚的知道自己出去面试也不一定每一次面试算法都能写出来。但是连续几次他发现你的面屏里面都是算法有问题,他就认为这不是运气问题,而是能力问题,这种就是很客观的评价形成了刻白印象,所以你要保证自己。至少不能连续几次面试犯同样的错。算法这个东西比较难保证,但是有些东西是可以的,例如某一轮你挂的时候是因为数据库的索引,这个知识点答的不好,那你就要把数据库整体系统性的复习,下一轮面试你可以,项目打的不好,可以消息队列答的不好,但是绝对不可以数据库再答的不好了。当然事实上对于任何面试都应该这样查漏补缺,只是对于字节来说这个格外重要,有些面试官真的会问之前面试官问过的问题
点赞 评论 收藏
分享
头像 会员标识
08-20 18:46
门头沟学院 C++
投递华为技术有限公司等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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