1. 超时,测试点 6/10
#include<iostream>
using namespace std;
class Node {
public:
int data;
Node* next;
};
class List {
public:
List() {
head = NULL;
}
Node* InsertNodeByIndex(int index, int x);
Node* InsertNodeByValue(int x, int y);
void DeleteNode(int x);
void DisplayList();
Node* head;
private:
};
Node* List::InsertNodeByIndex(int index, int x) {
if (index < 0) return NULL;
int curIndex = 1;
Node* curNode = head;
while (curNode && index > curIndex) {
curNode = curNode -> next;
curIndex++;
}
Node* newNode = new Node;
newNode -> data = x;
if (index == 0) {
newNode -> next = head;
head = newNode;
} else {
newNode -> next = curNode -> next;
curNode -> next = newNode;
}
return newNode;
}
Node* List::InsertNodeByValue(int x, int y) {
Node* preNode = NULL;
Node* curNode = head;
int curIndex = 1;
while (curNode && curNode -> data != x) {
preNode = curNode;
curNode = curNode -> next;
curIndex++;
}
Node* newNode = new Node;
newNode -> data = y;
//如果链表为空
if (curIndex == 1) {
newNode -> next = head;
head = newNode;
}
//链表不为空
else {
//如果找到了curNode
if (curNode) {
preNode -> next = newNode;
newNode -> next = curNode;
}
//没找到curNode
else {
preNode -> next = newNode;
}
}
return newNode;
}
void List::DeleteNode(int x) {
Node* preNode = NULL;
Node* curNode = head;
while (curNode && curNode -> data != x) {
preNode = curNode;
curNode = curNode -> next;
}
if (curNode) {
if (preNode) {
preNode -> next = curNode -> next;
delete curNode;
} else {
head = curNode -> next;
delete head;
}
}
}
void List::DisplayList() {
Node* curNode = head;
while (curNode != NULL) {
cout << curNode -> data << ' ';
curNode = curNode -> next;
}
}
int main() {
List list;
int num;
cin >> num;
for (int i = 0; i < num; i++) {
string s;
cin >> s;
if (s == "insert") {
int x, y;
cin >> x >> y;
list.InsertNodeByValue(x, y);
} else {
int value;
cin >> value;
list.DeleteNode(value);
}
}
if (list.head == NULL) {
cout << "NULL";
} else {
list.DisplayList();
}
return 0;
}