题解 | #【模板】链表#
【模板】链表
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;
}
查看7道真题和解析