// 程序员面试100题(算法)之反转单链表
#include "stdafx.h"
#include <iostream>
using namespace std;
struct LinkNode
{
int value;
LinkNode *next;
};
LinkNode *CreateLink(LinkNode *headNode, int &length)
{
int data = 0;
LinkNode *previous, *post;
if(NULL == headNode)
{
cin >> data;
if(-1 == data)
return NULL;
headNode = (LinkNode*)malloc(sizeof(LinkNode));
if(headNode)
{
headNode->value = data;
headNode->next = NULL;
length++;
}
else
{
cout << "No space" <<endl;
}
}
previous = post = headNode;
cin >> data;
while(data != -1)
{
post = (LinkNode*)malloc(sizeof(LinkNode));
if(post)
{
post->value = data;
post->next = NULL;
previous->next = post;
previous = post;
length++;
}
else
{
cout << "No space" << endl;
}
cin >> data;
}
return headNode;
}
void PrintLink(LinkNode *headNode)
{
if(headNode == NULL)
{
cout << "Linklist is empty" <<endl;
return;
}
LinkNode *p = headNode;
while(p)
{
cout << p->value << " ";
p = p->next;
}
cout << endl;
}
LinkNode *ReverseLink(LinkNode *headNode)
{
if(NULL == headNode)
return NULL;
if(NULL == headNode->next)
return headNode;
LinkNode *previous, *post, *r;
previous = headNode;
post = headNode->next;
while(post != NULL)
{
r = post->next;
post->next = previous;
previous = post;
post = r;
}
headNode->next = NULL;
return previous;
}
int _tmain(int argc, _TCHAR* argv[])
{
int length = 0;
LinkNode *headNode = NULL;
cout << "Create a linklist(end up with -1)" <<endl;
headNode = CreateLink(headNode, length);
PrintLink(headNode);
headNode = ReverseLink(headNode);
PrintLink(headNode);
return 0;
}