#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
LNode *next;
}LNode,*LinkList;
//创建单链表 尾插法
void CreateList(LinkList &L,int n)
{
LNode *r,*p;
L = new LNode;
L->next = NULL;
r = L;
cout << "请输入表中元素:";
for(int i=0;i<n;i++)
{
p = new LNode;
cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
}
}
//逆转(利用前插法)
void Inverse(LinkList &L)
{
LinkList p,q;
p = L->next;
L->next = NULL;
//前插法
while(p != NULL)
{
q = p->next;
p->next = L->next;
L->next = p;
p = q;
}
}
void Display(LinkList &L)
{
LNode *p;
p = L->next;
while(p != NULL)
{
cout << p->data << " ";
p = p->next;
}
}
int main()
{
int n;
LinkList L;
cout << "请输入单链表的长度:";
cin >> n;
CreateList(L,n);
cout << "逆转后的单链表为:" << endl;
Inverse(L);
Display(L);
return 0;
}
设计一个算法,将链表中所有结点的链表方向“原地”逆转,即要求仅利用原表的存储空间,换句话说,要求算法的空间复杂度为O(1)
猜你喜欢
转载自blog.csdn.net/weixin_43790779/article/details/105064964
今日推荐
周排行