编写算法实现带头结点单链表的就地逆置,即利用原带头结点单链表的结点空间把元素序列a₀,a₁…,aₙ₋₁逆置为aₙ₋₁,…,a₁,a₀
供参考:
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data;
struct LNode* next;
}LNode;
typedef LNode *LinkList;
//尾插法创建链表
LinkList Create_List(){
LinkList L,p,r;
int x;
r=L=(LinkList)malloc(sizeof(LNode));
L->next =NULL;
scanf("%d",&x);
while(x!=0){
p=(LinkList)malloc(sizeof(LNode));
p->data =x;
p->next =NULL;
r->next =p;
r=p;
scanf("%d",&x);
}
return L;
}
//带头结点的链表就地逆置
LinkList Convert_List(LinkList L) {
LinkList p, q;
p = L->next;
L->next = NULL;
while (p != NULL) {
q = p;
p = p->next;
q->next = L->next;
L->next = q;
}
return L;
}
void print(LinkList L){
LinkList p;
p=L->next ;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main() {
LinkList L=Create_List();
print(L);
L=Convert_List(L);
print(L);
return 0;
}