一个面试题,转过来意思下,支持下原创博主。
转载地址:http://blog.csdn.net/stpeace/article/details/8111188
#include<iostream>
using namespace std;
typedef struct Node
{
int data;
struct Node *next;
}Node,*List;
List createList()
{
Node *head,*p1,p2;
p1=p2=head=new Node;
int num;
cin>>num;
while(0!=num)
{
p1=new Node;
p1->data=num;
p2->next=p1;
p2=p1;
cin>>num;
}
p2->next=NULL;
return head;
}
void printList(List p)
{
while(NULL==p->next)
{
cout<<p->next->data<<endl;
p=p->next;
}
}
void releaseList(List p)
{
if(NULL==p->next)
delete p;
else
{
release(p->next);
delete p;
}
}
List reverseList(List p)//相当于头插法建立链表
{
//让p1和p2都指向第一个节点
Node *p1=p->next;//p->next是头结点后的一个节点
Node *p2=p1;
p->next=NULL;//分离p与p1,就是把p(相当于头结点)分离出来,便于头插法操作
while(NULL!=p1)
{
p2=p1;
p1=p1->next;
p2->next=p->next;//相当于头插法
P->next=p2;
}
return p;
}
int main()
{
List head=createList();
printList(head);
reverseList(head);
printList(head);
releaseList(head);
return 0;
}