如何在不创建新列表的情况下反向链接列表? [英] How to reverse a link list without creating new list?
本文介绍了如何在不创建新列表的情况下反向链接列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
反向链接列表而不创建新列表?
Reverse the link list without creating new list?
推荐答案
今天是您的幸运日! :-),尽管它在c ++中!
today is your lucky day! :-), though it is in c++!
#include "stdafx.h"
#include <iostream>
using namespace std;
struct Node
{
int Data;
Node* Next;
Node()
{
Data =-1;
Next= NULL;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
// fill data into link List
Node* First= NULL, *Next=NULL,*Temp;
for(int i =10;i<20;i++)
{
Temp = new Node();
Temp->Data = i;
Next = First;
if(Next==NULL)
{
First = Temp;
}
else
{
while((Next->Next!=NULL))
{
Next=Next->Next;
}
Next->Next = Temp;
}
}
//display data
cout<<"Display Data"<<endl;
Next = First;
while((Next!=NULL))
{
cout<<Next->Data<<endl;
Next=Next->Next;
}
// Reverse it now
Node* Last=NULL,*ltTemp;
while(First->Next!=NULL)
{
ltTemp = First;
Temp = First->Next;
while((Temp->Next!=NULL))
{
if(Temp)
Temp=Temp->Next;
if(ltTemp)
ltTemp= ltTemp->Next;
}
// Plug the last one
ltTemp->Next= NULL;
// Place in reverse order
if(Last== NULL)
{
Last=Temp;
}
else
{
Next = Last ;
while((Next->Next!=NULL))
{
Next=Next->Next;
}
Next->Next = Temp;
}
}
if(Temp)
Temp->Next= First;
//display data
cout<<"Display Data reverse order"<<endl;
Next = Last;
while((Next!=NULL))
{
cout<<Next->Data<<endl;
Next=Next->Next;
}
/// delete all the allocated memory
Next = First;
if(Next)
while((Next!=NULL))
{
Temp = Next;
Next=Next->Next;
delete Temp;
}
if(Next)
delete Next;
}
一个:-) ..这次,此逻辑工作更快
one more :-).. this time this logic work faster
#include "stdafx.h"
#include <iostream>
using namespace std;
struct Node
{
int Data;
Node* Next;
Node()
{
Data =-1;
Next= NULL;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
// fill data into link List
Node* First= NULL, *Next=NULL,*Temp;
for(int i =10;i<20;i++)
{
Temp = new Node();
Temp->Data = i;
Next = First;
if(Next==NULL)
{
First = Temp;
}
else
{
while((Next->Next!=NULL))
{
Next=Next->Next;
}
Next->Next = Temp;
}
}
//display data
cout<<"Display Data"<<endl;
Next = First;
while((Next!=NULL))
{
cout<<Next->Data<<endl;
Next=Next->Next;
}
// Reverse it now
Node* Last=NULL,*ltTemp;
Temp= First;
while(Temp)
{
ltTemp = Temp->Next;
if(Last)
{
Temp->Next=Last;
}
else
Temp->Next=NULL;
Last = Temp;
Temp=ltTemp;
}
//display data
cout<<"Display Data reverse order"<<endl;
Next = Last;
while((Next!=NULL))
{
cout<<Next->Data<<endl;
Next=Next->Next;
}
/// delete all the allocated memory
Next = First;
if(Next)
while((Next!=NULL))
{
Temp = Next;
Next=Next->Next;
delete Temp;
}
if(Next)
delete Next;
}
这是家庭作业吗?..您是否尝试过逻辑自己?
小代码段:-
说您的链接列表是用此类创建的:-
struct Node
{
int数据;
struct Node *下一步;
};
让我给出一个线索,使用temp Node变量进行反转.
is it homework??.. have you tried logic urself?
little code snippet:-
say your linklist is created with this class :-
struct Node
{
int Data;
struct Node * Next;
};
let me give a clue, use temp Node variable to reverse.
这篇关于如何在不创建新列表的情况下反向链接列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文