单链表的的逆置(带头结点)

来源:互联网 发布:c语言void什么意思 编辑:程序博客网 时间:2024/04/20 10:53

一个面试题,转过来意思下,支持下原创博主。

转载地址: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;}



0 0