0
点赞
收藏
分享

微信扫一扫

链表的逆转

程序员伟杰 2022-01-25 阅读 64

描述

利用单链表表示一个整数序列,通过一趟遍历,将单链表中所有结点的链接方向逆转。要求空间复杂度为O(1)。

输入

多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。

输出

对于每组数据分别输出一行,逆序输出链表中的元素,元素之间用空格分隔。

输入样例 1 

5
1 2 3 4 5
6
3 1 2 5 4 6
0

输出样例 1

5 4 3 2 1
6 4 5 2 1 3
#include<iostream>
#include<string>
#define OK 1
#define ERROR 0
#define OVERFLOW -2       
using namespace std;   
typedef struct LNode
{
    int data;
    struct LNode *next;
}LNode,*LinkList;

int InitList(LinkList &L)			
{
    L =new LNode;			
    L->next=NULL;
	return OK;
}
int Reverse(LinkList &L)		
{
	LinkList r=L;
	int i,n;
	while(cin>>n&&n!=0)			
	{
		for(i=0;i<n;i++)
		{
			LinkList p=new LNode;		
			cin>>p->data;   
			p->next=NULL;
			r->next=p;
			r=p;		
		}
		r = L;
		LinkList s=L->next,t=NULL;	
		while(s)
		{ 
			t=s;                 
			s=s->next;          
			t->next=r;             
			r=t;                    
		}
		L->next=NULL;                      
		L=r;
		while(L->next->next)
		{
			cout<<L->data<<" ";	
			L=L->next;
		}
		cout<<L->data<<endl;	
		L=r;
	}
	return OK;
}
int main()
{
    LinkList L;
    InitList(L);
    Reverse(L);					
    return 0;                
}
举报

相关推荐

0 条评论