题目
从尾到头反过来打印出链表中每个结点的值。
解题思路
- 使用递归
- 使用头插法创建一个新的链表
- 使用栈
递归
//使用递归实现不带头结点的逆向输出链表
void ReversePrintLink(Element* point)
{
if(point==NULL)
{
printf("error");
return;
}
if(point->next!=NULL)
{
ReversePrintLink(point->next);
}
printf("%d ",point->value);
}
头插法
Element* otherLink;
otherLink=new Element();
otherLink=NULL;
Element* curPoint;
curPoint=firstElement->next;
while(curPoint!=NULL)
{
Element* newItem;
newItem=new Element();
newItem->value=curPoint->value;
newItem->next=otherLink->next;
otherLink->next=newItem;
curPoint=curPoint->next;
}
栈
stack<int> linkStack;
Element* curPoint;
curPoint=firstElement->next;
while(curPoint!=NULL)
{
linkStack.push(curPoint->value);
curPoint=curPoint->next;
}
while(!linkStack.empty())
{
int value=linkStack.top();
linkStack.pop();
printf("%d ",value);
}
其他
#include<cstdlib>
#include<cstdio>
#include<stack>
using namespace std;
//链表节点声明
struct Element
{
int value;
Element* next;
}
//打印带头结点的链表
void PrintLinkWithHead(Element* head)
{
Element* curPoint;
curPoint=head->next;
while(curPoint!=NULL)
{
printf("%d ",curPoint->value);
curPoint=curPoint->next;
}
}
//尾插法创建带头结点链表
Element* CreateLinkByTail()
{
Element* firstElement;
firstElement = new Element();
Element* prePoint;
prePoint=firstElement;
int count=0;
for(int i=1;i<=20;i++)
{
Element *newElement;
newElement=new Element();
newElement->value=i*i;
newElement->next=NULL;
prePoint->next=newElement;
prePoint=newElement;
count++;
}
firstElement->value=count;
return firstElement;
}
int main()
{
Element* firstElement=CreateLinkByTail();
return 0;
}