双链表的头结点的prior为NULL
最后一个元素的next为NULL
#include <iostream>
#include<stdlib.h>
using namespace std;
typedef struct Node{
int data;
struct Node * next;
struct Node * prior;
}Node,*LinkList;
LinkList reverse(LinkList *L1){
LinkList L =(*L1);
LinkList pre=NULL;
LinkList temp;
while(L){ //原链表的最后一个位置的next为空
//改变后的新的头结点的前一个节点时null
temp = L->next;
L->next = pre;
L->prior = temp;
pre = L;
L = temp;
}
// cout<<"fds"<<endl; //作用是让原来的头结点还是头结点
// (*L1)->next = pre; //加上这几句话支持多次反转 //不加只支持一次
// (*L1)->prior->next =NULL;//是其成为新的尾节点,尾节点的next为null
// (*L1)->prior = NULL;
// pre->prior = (*L1);
return pre;
}
int main(){
LinkList head;
head = (LinkList)malloc(sizeof(Node));
head->next = NULL;
head->prior = NULL;
LinkList q=NULL ;
for(int i=0;i<10;i++){//插在第一个位置
LinkList s = (LinkList)malloc(sizeof(Node));
s->data=i+1;
s->prior = head;
head->next = s;
s->next=q;
if(q!=0)
q->prior = s;
q=s;
}
q = reverse(&head);
while(q!=head){
cout<<q->data<<endl;
q=q->next;
}
q = q->prior;
while(q){
cout<<q->data<<endl;
q=q->prior;
}
// reverse(&head);
// reverse(&head);
// q = head->next;
// while(q){
// cout<<q->data<<endl;
// q=q->next;
// }
return 0;
}