题解 | #【模板】链表#

【模板】链表

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

#include <cstring>
#include <iostream>
using namespace std;

// 链表结构
typedef struct LNode {
    int data;
    struct LNode* next;
} LNode, *LinkedList;

// 链表初始化 带头结点的单链表
bool initList(LinkedList& L) {
    L = (LNode*)malloc(sizeof(LNode));
    L -> next = NULL;
    L -> data = -1;
    if (L == NULL) return false;
    return true;
}

// 在当前结点之后插入新结点
bool insertNextNode(LNode* q, int b) {
    if (q == NULL) return false;
    LNode* s = (LNode*)malloc(sizeof(LNode));
    s -> data = b;
    s -> next = q -> next;
    q -> next = s;
    return true;
}

// 链表插入
bool insert(LinkedList& L, int a, int b) {
    LNode* p = L;
    // 找到插入值结点的前一个结点
    while (p -> next != NULL && p -> next -> data != a) {
        p = p->next;
    }
    insertNextNode(p, b);
    return true;
}

// 链表删除
bool deleteNode(LinkedList& L, int a) {
    LNode* p = L;
    LNode* q = L;
    while (p != NULL && p -> data != a) {
        q = p;
        p = p -> next;
    }
    if (p == NULL) return true;
    q -> next = p -> next;
    free(p);
    return true;
}

// 打印当前链表的所有data
void printfAllNode(LinkedList L) {
    LNode* p = L;
    if (L -> next == NULL)
        cout << "NULL";
    while (p -> next != NULL) {
        p = p -> next;
        cout << p -> data << " ";
    }
}

int main() {
    int a, b;
    int count = 0;
    string str;
    string inserta = "insert";
    string deletea = "delete";
    cin >> count;
    LinkedList L;
    initList(L);
    for (int i = 0; i < count; i++) {
        // cin >> str >> a >> b;
	    // 注意输入情况 delete 和 insert 结构不同
        cin >> str;
        if(inserta ==  str) {
            cin >> a;
            cin >> b;
        } else {
            cin >> a;
        }
        if (inserta ==  str) {
            insert(L, a, b);
        } else if (deletea ==  str) {
            deleteNode(L, a);
        }
    }
    printfAllNode(L);
    return 0;
}

全部评论

相关推荐

小厂面经,也是我的处女面(30min)1.自我介绍2.spring&nbsp;boot的自动装配原理(好多类和接口的单词都忘了全称是啥了,就说了记得的单词,流程应该说对了吧)3.有用过redis吗?主要是用在实现什么功能(说了技术派用redis的zset来实现排行榜)5.有了解过Redisson吗?讲一下对于分布式锁的了解以及在什么场景下应用(说了秒杀场景)6.对mysql有了解吗?包括它的索引优化和创建(把想起来的全说了)7.了解设计模式吗?比如单例模式,为什么要使用单例模式,它的优点是什么(昨天刚看的设计模式)8.工厂模式有了解吗?主要的使用场景是?(也是昨天刚看的)9.场景题:有7个服务器,需要在早上十点定时的向数据库中的用户表中的用户发短信,如果做到发送的消息不重复,且如果发送失败了需要知道是到哪个用户失败了,这样下次就直接从这个用户开始(我答了用spring&nbsp;task来实现定时,用分布式锁来保证只有一份服务器可以发送消息,用消息队列来存储消息,然后用消息确认机制来保证错误信息的记录,以及在数据库或者业务层面完成消息消费的幂等性)10.场景题:如果在系统启动的时间就将数据库的所有用户相关的信息都读到一个hashmap中(这个没啥思路,没答好)27届的投了一个星期终于有一个面试了,大部分公司都只招26的
inari233:已oc,拒了
查看9道真题和解析
点赞 评论 收藏
分享
03-15 12:48
门头沟学院 Java
牛牛要早起:这个一般就跟你说有高薪,然后叫你买车,之后血亏
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务