反向输出链表 1、问题描述 2、代码

定义一个数据结构,并且反向输出单向链表。

2、代码

#include <iostream>  
#include <vector>  
#include <iterator>  
#include <cassert>  
#include<algorithm>//copy  
using namespace std;  
const int n=2;  
struct node  
{  
	int i;  
	node *next;  
};  
node *Reverse(node *head)  
{  
	//判断链表是否为空  
	assert(head != NULL &&  " function Reverse : list is null!");  
	node *temp=head->next;  
	//链表只有一个元素情况  
	if(temp == NULL ) return head;  
	//链表翻转前head-->temp-->tail,翻转后tail-->temp-->head  
	head->next=NULL;  
	node *tail=temp->next;  
	while(tail != NULL)  
	{  
		temp->next=head;  
		head=temp;  
		temp=tail;  
		tail=tail->next;  
	}  
	temp->next=head;  
	//返回翻转后的链表头指针  
	return temp;  
}  
void Print(node *head)  
{  
	while(head != NULL)  
	{  
		cout<<head->i<<"  ";  
		head=head->next;  
	}  
	cout<<endl;  
}  
int main()  
{  
	node *head=NULL,*tail=NULL,*temp=NULL;  
	head= new node;  
	head->i=1;head->next=NULL;  
	tail=head;  
	for(int i=2;i<=n;++i)  
	{  
		temp =new node;  
		temp->i=i;temp->next=NULL;  
		tail->next=temp;  
		tail=temp;  
	}  
	Print(head);  
	cout<<"------------"<<endl;  
	head=Reverse(head);  
	Print(head);  
        
	return 0;  
}