#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct mode{
Elemtype data;
struct mode *next;
}LNode, *LinkList;
//后插法创建单链表
void List_TailInsert(LinkList L, int n)
{
printf("带头节点尾插法--输入节点\n");
LNode *r, *s;
r = L;
Elemtype x;
for(int i = 0; i < n; i++){
scanf("%d", &x);
s = (LNode*)malloc(sizeof(LNode));
s->data = x;
s->next = NULL;
r->next = s;
r = s;
}
}
//前插法单链表反转
LinkList Head_Reverse(LinkList L, int n)
{
if(L == NULL || L->next == NULL) return L;
LinkList New_L; //创建一个新链表,存储逆转后的单链表
New_L = (LNode*)malloc(sizeof(LNode));//对新链表设置头结点
New_L->next = NULL; //初始化
LNode *p = L->next; //p指针的作用是遍历L链表
LNode *s; //s为每次插入新链表的节点
for(int i = 0; i < n; i++){
//TODO
s = (LNode*)malloc(sizeof(LNode)); //创建新节点
s->data = p->data; //新节点的值为此时p节点对应的值
s->next = New_L->next; //该节点next为新链表头结点的next
New_L->next = s; //新链表头结点的next 改为该节点
p = p->next; //L链表中的p节点后移一位
}
return New_L;
}
//输出链表值
void OutPut(LinkList L)
{
LNode *p = L;
while(p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
int n;
printf("请输入有几个节点");
scanf("%d", &n);
LinkList L = (LNode*)malloc(sizeof(LNode));
L->next = NULL;
List_TailInsert(L, n);
printf("尾插法-输出建立后的单链表");
OutPut(L->next);
LinkList New_L = Head_Reverse(L,n);
printf("逆置后的单链表");
OutPut(New_L->next);
}
前插法逆置单链表
于 2024-04-08 21:21:37 首次发布
本文介绍了如何使用C语言实现后插法创建单链表,并提供了前插法单链表的反转函数,展示了链表的构建和操作过程。
摘要由CSDN通过智能技术生成