#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef int type;
typedef struct lnode //定义链表结点的数据结构
{
int data;
struct lnode *next;
}Lnode;
typedef Lnode node;
void reverse(Lnode *h)//将原链表就地倒置
{
Lnode *q=h->next;
Lnode *p;
h->next=NULL;
while(p!=NULL){
q=p;
p=p->next;
q->next=h->next;
h->next=q;
}
}
void display(Lnode *show){
Lnode *p=show->next;
while(p!=NULL){
printf("%d\n",p->data);
p=p->next;
}
printf("\n");
}
int main () {
Lnode *node=(Lnode *)malloc(sizeof(1000));
Lnode *er=(Lnode *)malloc(sizeof(1000));
er->data=2;
node->next=er;
Lnode *san=(Lnode *)malloc(sizeof(1000));san->data=3;
Lnode *si=(Lnode *)malloc(sizeof(1000));
si->data=4;
si->next=NULL;
er->next=san;
san->next=si;
display(node);
reverse(node);
display(node);
}
实现原理如下:
示例 head ->A->B->C->D;
首先:第一趟:将head,A断开和B的链接,将其和head进行链接;
第二趟:将后面的B链接到head和A之间;
后面依次是将每个节点放置到head和其后面一个节点中去,最后完成单链表的转置,空间复杂度1;