初始定义:
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode* next;
int Length;
}LNode, * LinkList;
int InitList(LinkList& L) {
L = (LNode*)malloc(sizeof(LNode));
if (L == NULL)
return 0;
L->next = NULL;
L->data = 0;
L->Length = 0;
return 1;
}//初始化单链表
数据进入:
int SetList(LinkList& L, int n) {
InitList(L);
for (int j = n; j > 0; j--) {
LNode* p = (LNode*)malloc(sizeof(LNode));
if (!p) return 0;
cin >> p->data;
p->next = L->next;
L->next = p;
L->Length++;
}
cout << "输入完毕" << endl;
return 1;
}
数据展示:
void ShowList(LinkList& L) {
LNode* p;
p = L->next;
while (p != NULL) {
cout << p->data << " ";
p = p->next;
}
cout << "展示完毕" << L->Length << endl;
}
链表反转:
void RevealList1(LinkList &L) {
LNode* next = NULL;
LNode* pre = NULL;
LNode* p = L->next;
for(int i=0;i< L->Length;i++)
{
next = p->next;
p->next = pre;
pre = p;
p = next;
}
L->next = pre;//此时的P和Next都为空,所以指向pre而不是P或Next
}//链表反转 迭代
LinkList Recursion(LNode *L) {
if (L->next == NULL||L == NULL) {
return L;
}
LNode* head = Recursion(L->next);
L->next->next = L;
L->next = NULL;
return head;
}
void RevealList2(LinkList& L) {
L->next = Recursion(L->next);
}//链表反转 递归
# 运行代码:
int main() {
LinkList L1;
SetList(L1,4);
ShowList(L1);
//RevealList1(L1);
//RevealList2(L1);
ShowList(L1);
system("pause");
return 0;
}