单链表的复制相对简单,另外代码中有生成单链表的两种方式,只是输入方式不一样,方法是一样的。
#include <iostream>
#include <malloc.h>
using namespace std;
typedef int Elementtype;
struct celltype {
Elementtype element;
celltype *next;
};
typedef celltype *LIST;
LIST Copy(LIST L1) {
LIST L2;
L2 = (LIST)malloc(sizeof(celltype));
celltype *s, *r = L2, *p = L1->next;
while (p != NULL) {
s = (celltype *)malloc(sizeof(celltype));
s->element = p->element;
r->next = s;
r = s;
p = p->next;
}
r->next = NULL;
return L2;
}
int main() {
LIST L1;
L1 = (LIST)malloc(sizeof(celltype));
celltype *s1, *r1 = L1, *print1 = L1;
// Elementtype a[5] = {1, 3, 5, 7, 9};
// for (int i = 0; i < 5; i++) {
// s1 = (celltype *)malloc(sizeof(celltype));
// s1->element = a[i];
// r1->next = s1;
// r1 = s1;
// }
// r1->next = NULL;
Elementtype x;
cout << "Please input LIST1's element(Input -999 to exit):" << endl;
cin >> x;
while (x != -999) {
s1 = (celltype *)malloc(sizeof(celltype));
s1->element = x;
r1->next = s1;
r1 = s1;
cin >> x;
}
r1->next = NULL;
cout << "LIST1:" << endl;
while (print1->next != NULL) {
cout << print1->next->element << " ";
print1 = print1->next;
}
LIST L2;
L2 = Copy(L1);
celltype *print2 = L2->next;
cout << "\n" << "LIST2:" << endl;
while (print2 != NULL) {
cout << print2->element << " ";
print2 = print2->next;
}
return 0;
}
主要参考: 《数据结构与算法》(第五版)张岩
《数据结构考研复习指导》(王道