利用查找、提取数据、插入、删除、输出等函数,顺利搞定第二题
#include<iostream>
#define ok 0
#define error -1
using namespace std;
class ListNode {
public:
int data;
ListNode*next;
ListNode() {
next = NULL;
}
};
class LinkList {
public:
ListNode * head;
int len;
public:
LinkList();
~LinkList();
ListNode*LL_index(int i);
int LL_insert(int i, int item);
int LL_del(int i);
void LL_display();
int LL_get(int i);
int swap(int pa, int pb);
};
LinkList::LinkList() {
head = new ListNode();
len = 0;
}
LinkList::~LinkList() {
ListNode*p, *q;
p = head;
while (p != NULL) {
q = p;
p = p->next;
delete q;
}
len = 0;
head = NULL;
}
void LinkList::LL_display() {
ListNode *p = head->next;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int LinkList::LL_insert(int i, int item) {
if (i < 1 || i> len + 1)
return error;
ListNode*pI = new ListNode;
if (!head->next&&i == 1) {
head->next = pI;
pI->data = item;
pI->next = NULL;
len++;
return ok;
}
int j = 0;
ListNode*pG = head;
while (pG->next&&j < i - 1) {
pG = pG->next;
j++;
}
if (!pG || j > i - 1)
return error;
ListNode*pU = new ListNode;
pU->next = pG->next;
pG->next = pU;
pU->data = item;
len++;
return ok;
}
ListNode* LinkList::LL_index(int i) {
if (i > len || i < 0) {
return NULL;
}
if (i == 0)
return head;
int j = 1;
for (ListNode*pG = head->next; pG->next, j <= i; pG = pG->next, j++) {
if (j == i) {
return pG;
}
}
}
int LinkList::LL_del(int i) {
if (i > len || i<1)
return error;
ListNode*pI = new ListNode;
int j = 0;
ListNode*pG = head;
while (pG->next&&j < i - 1) {
pG = pG->next;
j++;
}
if (!pG || j > i - 1)
return error;
pI = pG->next;
pG->next = pI->next;
delete pI;
len--;
return ok;
}
int LinkList::LL_get(int i) {
if (i > len || i < 1) {
return error;
}
ListNode*num = LL_index(i);
if (num == NULL)
return error;
else
return num->data;
}
int LinkList::swap(int pa, int pb) {
if (pa<1 || pb<1 || pa>len || pb>len) {
return error;
}
int m = LL_get(pa);
int n = LL_get(pb);
LL_insert(pa, n);
LL_del(pa + 1);
LL_insert(pb, m);
LL_del(pb + 1);
return ok;
}
int main() {
LinkList sa;
int num;
cin >> num;
int number;
for (int i = 0; i < num; i++) {
cin >> number;
sa.LL_insert(i + 1, number);
}
sa.LL_display();
int pa, pb, k;
cin >> pa >> pb;
k=sa.swap(pa, pb);
if (k == 0)
sa.LL_display();
else
cout << "error" << endl;
cin >> pa >> pb;
k=sa.swap(pa, pb);
if (k == 0)
sa.LL_display();
else
cout << "error" << endl;
return 0;
}
第三题,有点问题存在
#include<iostream>
#define ok 0
#define error -1
using namespace std;
class ListNode {
public:
int data;
ListNode*next;
ListNode() {
next = NULL;
}
};
ListNode* Lc;
int LL_merge(ListNode *La, ListNode *Lb);//要放在类声明的后面
class LinkList {
public:
ListNode * head;
int len;
public:
LinkList();
~LinkList();
int LL_insert(int i, int item);
void LL_display();
};
LinkList::LinkList() {
head = new ListNode();
len = 0;
}
LinkList::~LinkList() {
ListNode*p, *q;
p = head;
while (p != NULL) {
q = p;
p = p->next;
delete q;
}
len = 0;
head = NULL;
}
void LinkList::LL_display() {
ListNode *p = head->next;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int LinkList::LL_insert(int i, int item) {
if (i < 1 || i> len + 1)
return error;
ListNode*pI = new ListNode;
if (!head->next&&i == 1) {
head->next = pI;
pI->data = item;
pI->next = NULL;
len++;
return ok;
}
int j = 0;
ListNode*pG = head;
while (pG->next&&j < i - 1) {
pG = pG->next;
j++;
}
if (!pG || j > i - 1)
return error;
ListNode*pU = new ListNode;
pU->next = pG->next;
pG->next = pU;
pU->data = item;
len++;
return ok;
}
int LL_merge(ListNode *La, ListNode *Lb) {
ListNode* pa = La->next;
ListNode* pb = Lb->next;
Lc = La;
ListNode* pc = Lc;
while (pa&&pb) {
if (pa->data <= pb->data) {
pc->next = pb;
pc = pa;
pa = pa->next;
}
else {
pc->next = pb;
pc = pb;
pb = pb->next;
}
if (pa != NULL)
pc->next = pa;
else
pc->next = pb;
}
La = Lc;
return ok;
}
int main() {
LinkList sa;
int num1;
cin >> num1;
int number1;
for (int i = 0; i < num1; i++) {
cin >> number1;
sa.LL_insert(i + 1, number1);
}
sa.LL_display();
LinkList ta;
int num2;
cin >> num2;
int number2;
for (int i = 0; i < num2; i++) {
cin >> number2;
ta.LL_insert(i + 1, number2);
}
ta.LL_display();
LL_merge(sa.head, ta.head);
sa.LL_display();
return 0;
}
最后终于顺利解决问题:
#include<iostream>
#define ok 0
#define error -1
using namespace std;
class ListNode {
public:
int data;
ListNode*next;
ListNode() {
next = NULL;
}
};
ListNode* Lc;
int LL_merge(ListNode *La, ListNode *Lb);
class LinkList {
public:
ListNode * head;
int len;
public:
LinkList();
~LinkList();
int LL_insert(int i, int item);
void LL_display();
};
LinkList::LinkList() {
head = new ListNode();
len = 0;
}
LinkList::~LinkList() {
ListNode*p, *q;
p = head;
while (p != NULL) {
q = p;
p = p->next;
delete q;
}
len = 0;
head = NULL;
}
void LinkList::LL_display() {
ListNode *p = head->next;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int LinkList::LL_insert(int i, int item) {
if (i < 1 || i> len + 1)
return error;
ListNode*pI = new ListNode;
if (!head->next&&i == 1) {
head->next = pI;
pI->data = item;
pI->next = NULL;
len++;
return ok;
}
int j = 0;
ListNode*pG = head;
while (pG->next&&j < i - 1) {
pG = pG->next;
j++;
}
if (!pG || j > i - 1)
return error;
ListNode*pU = new ListNode;
pU->next = pG->next;
pG->next = pU;
pU->data = item;
len++;
return ok;
}
int LL_merge(ListNode *La, ListNode *Lb) {
ListNode* pa = La->next;
ListNode* pb = Lb->next;
ListNode* pc = La;
Lc = pc;
while (pa&&pb) {
if (pa->data <= pb->data) {
pc->next = pa;
pc = pa;
pa = pa->next;
}
else {
pc->next = pb;
pc = pb;
pb = pb->next;
}
if (pa != NULL)
pc->next = pa;
else
pc->next = pb;
}
return ok;
}
int main() {
LinkList sa;
int num1;
cin >> num1;
int number1;
for (int i = 0; i < num1; i++) {
cin >> number1;
sa.LL_insert(i + 1, number1);
}
LinkList ta;
int num2;
cin >> num2;
int number2;
for (int i = 0; i < num2; i++) {
cin >> number2;
ta.LL_insert(i + 1, number2);
}
LL_merge(sa.head, ta.head);
ListNode *p = Lc->next;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
return 0;
}
只是编译后不能顺利结束,关闭编译框时会无响应后关掉