个人代码如下,采用头插法建立一个新链表,时间复杂度O(N),空间复杂度O(N)。
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode
{
int data;
struct LNode* next;
}Node,*Link;
//初始化一个带头结点的链表
void Init(Link& link)
{
link = (Link)malloc(sizeof(Node));
link->next = NULL;
}
//通过链表的头插法,创建一个新链表link2,link2是link1的逆置
void Reverse(Link link1, Link& link2)
{
Node* p1 = link1,*s;
while (p1->next != NULL)
{
s = (Link)malloc(sizeof(Node));
s->data = p1->next->data;
s->next = link2->next;
link2->next = s;
p1 = p1->next;
}
}
void PrintLink(Link link)
{
Node* p = link;
while (p->next!=NULL)
{
printf("%d ", p->next->data);
p = p->next;
}
}
int main()
{
Link link1, link2;
Init(link1);
Init(link2);
Node* p = link1,*s;
int x;
scanf("%d", &x);//给链表输入元素
while (x < 9999)//输入数字大于9999便停止
{
s = (Link)malloc(sizeof(Node));
s->data = x;
p->next = s;
p = s;
scanf("%d", &x);
}
p->next = NULL;
Reverse(link1, link2);
PrintLink(link1);
printf("\n");
PrintLink(link2);
return 0;
}
欢迎指正。