单链表的就地反转

#include<iostream>
#include<vector>

using namespace std;

typedef struct node
{
	int element;
	struct node *next;
	struct node(int data):element(data),next(NULL){};
}Node;

Node* reverse_t(Node *head)
{
	
	Node *cur = head;
	if(cur==NULL||cur->next==NULL)
		return cur;
	Node *pNext = cur->next;

	while(pNext!=NULL)
	{
		Node *tmp = NULL;
		tmp = pNext->next;
		pNext ->next = cur;
		cur = pNext;
		pNext = tmp;
	}
	head->next=NULL;
	head = cur;
	return head;
}

int main()
{
	Node n0(0);
	Node n1(1);
	Node n2(2);
	Node n3(3);
	Node n4(4);
	n0.next = &n1;
	n1.next= &n2;
	n2.next = &n3;
	n3.next = &n4;
	Node *p = &n0;
	p = reverse_t(p);
	while(p)
	{
		cout<<p->element<<" ";
		p = p->next;
	}
}

  

 

posted @ 2016-04-14 16:23  Esapinit  阅读(226)  评论(0编辑  收藏  举报