设计一个算法,将链表中所有结点的链表方向“原地”逆转,即要求仅利用原表的存储空间,换句话说,要求算法的空间复杂度为O(1)。

xiaoxiao2025-04-10  21

语言:C++

#include <iostream> using namespace std; typedef struct LNode { int data; LNode *next; }LNode,*LinkList; //创建链表 int CreateList(LinkList &L,int n) { LNode *p,*r;int i; L=new LNode; L->next=NULL; r=L; for(i=0;i<n;i++) { p=new LNode; cin>>p->data; p->next=NULL;r->next=p; r=p; } return 0; } //输出链表 void display(LinkList L) { LNode *p; p=L->next; cout<<"("; while(p) {cout<<p->data<<" "; p=p->next;} cout<<")"<<endl; } //逆转 int VerList_L(LinkList &LA,LinkList &LC) { LNode *pa;LNode *pc; pa=LA->next; pc=LC; while(pa) { pc=pa; pa=pa->next; pc->next=LC->next; LC->next=pc; } delete LA; } int main() { LinkList LA;LinkList LB;LinkList LC;int n; cout<<"请输入需要创建单链表的长度:"<<endl; cin>>n; cout<<"请依次输入需要存入的数据(尾插法):"<<endl; CreateList (LA,n); cout<<"单链表A为:"; display(LA); LC=new LNode; LC->next=NULL; VerList_L(LA,LC); cout<<"逆转后单链表为:"; display(LC); return 0; }

 

转载请注明原文地址: https://www.6miu.com/read-5027960.html

最新回复(0)