#include<iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode *next;
} LNode;
void creatlist(LNode *&L,int a[],int n) {
LNode *s, *r;
int i;
L = (LNode *)malloc(sizeof(LNode));
L->next = NULL;//建立头结点
r = L;//r指针指向头结点
for (i = 0; i < n;i++) {
s = (LNode *)malloc(sizeof(LNode));
s->data = a[i];
r->next = s;
r = r->next;
}
r->next = NULL;
}
//原地逆置,把L->next = NULL
void reverse_linkList1(LNode *&L) {
LNode *p, *q;
p = L->next;
q = L;
if (L->next == NULL || L->next->next == NULL) {//如果只有一个头结点或者只有一个(除了头结点)结点就不用逆置
return;
}
L->next = NULL;
while (p != NULL) {
q = p->next;//临时指针变量
p->next = L->next;
L->next = p;
p = q;//将p指针后移
}
}
//新建立一个逆置头结点
void reverse_linkList2(LNode *&L) {
LNode *p, *q;
LNode *reverseHead = (LNode *)malloc(sizeof(LNode));//定义一个临时的逆置头结点
reverseHead->data = NULL;//初始化
reverseHead->next = NULL;
if (L->next == NULL || L->next->next == NULL) {//如果只有一个头结点或者只有一个(除了头结点)结点就不用逆置
return;
}
p = L->next;
q = L;
//reverseHead->next->next = NULL;
while (p != NULL) {
q = p->next;//临时指针变量
//cout << q->data << " "<<endl;
p->next = reverseHead->next;
reverseHead->next = p;
// cout << p->data << " "<<endl;
p = q;//将p指针后移
}
L->next = reverseHead->next;//将L头结点指向临时的头结点下一个结点
}
void print(LNode *L, int n) {
LNode *p;
p = L;
p = p->next;
for (int i = 0; i <n; i++) {
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
int main() {
int arr[] = { 1,2,3,4,5,6 };
int n = sizeof(arr) / sizeof(arr[0]);
LNode *L;
L = (LNode *)malloc(sizeof(LNode));
creatlist(L,arr,n);
cout << "逆置前单链表结点排序" << endl;
print(L, n);
reverse_linkList1(L);
cout << "逆置后单链表结点排序" << endl;
print(L, n);
reverse_linkList2(L);
cout << "逆置后单链表结点排序" << endl;
print(L, n);
}
逆置前单链表结点排序
1 2 3 4 5 6
逆置后单链表结点排序
6 5 4 3 2 1
逆置后单链表结点排序
1 2 3 4 5 6
单列表逆置
最新推荐文章于 2024-04-15 15:45:00 发布