voidset(int a[], int n) { //尾插 head = new Node; head -> next = NULL; r=head; //刚开始是r和head是在一起的,便于尾插操作 for (int i = 1; i <= n; i++) { p = new Node; p -> data = a[i]; p -> next = NULL; r -> next = p; //将p插到r后面 r = p; //r后移 } }
插入
1 2 3 4 5 6 7 8 9 10 11 12 13
voidinsert(int a[], int pos, int val) { //详见模拟图 p = head; //从头开始 int i = 0; while (p != NULL && i < pos - 1) { p = p -> next; //p指向下一个结点 i++; } Node *s; s = new Node; s -> data = val; s -> next = p -> next; p -> next = s; }
删除
1 2 3 4 5 6 7 8 9 10 11 12 13
voiddel(int a[], int pos) { //详见模拟图 p = head; int i = 0; while (p != NULL && i < pos - 1) { p = p -> next; i++; } Node *s; s = new Node; s = p -> next; p -> next = s -> next; delete[] s; }
打印
1 2 3 4 5 6 7 8
voidprint() { p = head -> next; while (p -> next != NULL) { cout << p -> data << " "; p = p -> next; } cout << p -> data << endl; }
intmain() { int n; cin >> n; int a[200000]; for (int i = 1; i <= n; i++) { cin >> a[i]; } set(a, n); int m; cin >> m; for (int i = 1; i <= n; i++) { if (a[i] == m) { del(a, i); } } print(); delete[] p; //防内存泄漏 delete[] head; return0; }