链表操作—单链表的倒置
代码:
#include<iostream>
#include<malloc.h>
#include<stdlib.h>
using namespace std;
typedef int Elemtype;
typedef struct LNode {
Elemtype data;
LNode* next;
}LNode, * Linklist;
void createList(Linklist& L) {
L = (Linklist)malloc(sizeof(LNode));
L->next = NULL;
Linklist p;
p = (Linklist)malloc(sizeof(LNode));
cout << "输入创建链表的数据,输入-1表示结束" << endl;
cin >> p->data;
while (p->data != -1) {
p->next = L->next;
L->next = p;
p = (Linklist)malloc(sizeof(LNode));
cin >> p->data;
}
}
void convertList1(Linklist& L) {
Linklist temp, end;
temp = (Linklist)malloc(sizeof(LNode));
end = L;
while (end->next) {
end = end->next;
}
while (L->next != end) {
temp = L->next;
L->next = L->next->next;
temp->next = end->next;
end->next = temp;
}
}
void convertList2(Linklist& L) {
Linklist p, q, r;
p = L->next;
q = L->next->next;
r = L->next->next->next;
p->next = NULL;
while (q) {
q->next = p;
p = q;
q = r;
if (r) r = r->next;
}
L->next = p;
}
void printList(Linklist& L) {
Linklist p;
p = L->next;
while (p) {
cout << p->data << " ";
p = p->next;
}
}
int main()
{
Linklist L;
createList(L);
cout << "生成的单链表为:";
printList(L);
cout << endl;
convertList1(L);
cout << "倒置后的单链表为:";
printList(L);
cout << endl;
convertList2(L);
cout << "再次倒置后的单链表为:";
printList(L);
return 0;
}
运行结果: