#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct mode{
Elemtype data;
struct mode*next;
}LNode, *LinkList;
//尾插法
void List_TailInsert(LinkList L, int n)
{
LNode*s, *r;
Elemtype x;
int i;
r = L;
printf("带头节点尾插法--输入节点");
for(i = 0; i < n; i++){
scanf("%d", &x);
s = (LNode*)malloc(sizeof(LNode));
s->next = NULL;
s->data = x;
r->next = s;
r = s;
}
}
//原地翻转
void localReverse(LinkList L)
{
if(L == NULL || L->next == NULL) return;
LNode *beg = L->next;
LNode *end = L->next->next;
while(end != NULL){
beg->next = end->next;
end->next = L->next;
L->next = end;
end = beg->next;
}
}
void OutPut(LinkList L)
{
LNode*p;
p = L; //p = L->next;
while(p != NULL){
//TODO
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
int n;
printf("请输入有几个节点");
scanf("%d", &n);
LinkList L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
List_TailInsert(L, n);
printf("尾插法-输出建立后的单链表");
OutPut(L->next);
localReverse(L);
printf("逆置后的单链表");
OutPut(L->next);
return 0;
}
单链表原地逆转
最新推荐文章于 2024-05-14 17:02:05 发布