创建逆序链表有两种方法,一种是创建逆序链表,一种是用栈记录链表的值,然后将栈的值输出。
创建逆序链表
创建逆序链表是在一个链表的基础上,头插法创建新链表,这就是创建的新链表。
来看看代码实现
link* printreverse(link* L)
{
link* p, * q;
p = L->next;
L->next = NULL;
while (p)
{
q = p;
p = p->next;
q->next = L->next;
L->next = q;
}
return L;
}
我画了一个图来帮助理解
总代码:打印逆序链表
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Link
{
int data;
struct Link* next;
}link;
//尾插法
link* creatlink()
{
link* head = (link*)malloc(sizeof(link));
link* list = head;
//head->next = NULL;
for (int i = 0; i < 5; i++) {
link* a = (link*)malloc(sizeof(link));
a->data = i;
//a->next = head->next;
//head->next = a;
a->next = NULL;
head->next = a;
head = a;
}
return list;
}
//头插法
link* creattaillink()
{
link* head = (link*)malloc(sizeof(link));
link* list = head;
head->next = NULL;
for (int i = 0; i < 5; i++) {
link* a = (link*)malloc(sizeof(link));
a->data = i;
a->next = head->next;
head->next = a;
}
return list;
}
link* printreverse(link* L)
{
link* p, * q;
p = L->next;
L->next = NULL;
while (p)
{
q = p;
p = p->next;
q->next = L->next;
L->next = q;
}
return L;
}
void printlist(link* p)
{
link* list = p;
while (list->next) {
list = list->next;
printf("值为:%d\n", list->data);
}
}
int main()
{
link* p = (link*)malloc(sizeof(link));
//p = creatlink();
p = creattaillink();
printlist(p);
p = printreverse(p);
printlist(p);
return 0;
}