导航:首页 > 源码编译 > 单链表倒置算法

单链表倒置算法

发布时间:2023-01-16 22:43:09

㈠ 单链表的就地逆置的算法!!

就地逆置即算法的辅助空间为O(1)。

思路为:逆置链表初始为空,表中节点从原链表中依次“删除”,再逐个插入逆置链表的表头(即“头插”到逆置链表中),使它成为逆置链表的“新”的第一个结点,如此循环,直至原链表为空。

实现代码:

voidconverse(LinkList*head)
{
LinkList*p,*q;
p=head->next;
head->next=NULL;
while(p)
{
/*向后挪动一个位置*/
q=p;
p=p->next;

/*头插*/
q->next=head->next;
head->next=q;
}
}

㈡ 单链表的逆置算法

帮你写好了,你看下

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
int data;
struct node *next;
}Node;

//创建链表
Node *CreatList(void)
{
int i;
Node *head, *p, *q;

head = NULL;
printf("请输入您要输入的数据:\n");
scanf("%d", &i);
while(i != 0)
{
p = (Node *)malloc(sizeof(Node));
p->data = i;
if(head == NULL)
q = head = p;
else
q->next = p;
q = p;
scanf("%d", &i);
}
p->next = NULL;
return head;
}

//链表的逆置
Node *ReverseList(Node *head)
{
Node *p, *q, *r;

p = head;
q=r=NULL;

while(p)
{
q = p->next;
p->next = r;
r = p;
p = q;
}
return r;
}

//输出链表
void PrintList(Node *head)
{
Node *p;

p = head;
while(p)
{
printf("%d\n", p->data);
p = p->next;
}
}

int main(void)
{
Node *head;

head = CreatList();
printf("链表逆置前的数据:\n");
PrintList(head);

head = ReverseList(head);
printf("链表逆置后的数据:\n");
PrintList(head);

return 0;
}

请输入您要输入的数据:
1 2 3 4 5 6 0
链表逆置前的数据:
1
2
3
4
5
6
链表逆置后的数据:
6
5
4
3
2
1

阅读全文

与单链表倒置算法相关的资料

热点内容
加密u盘内容怎么拷贝 浏览:281
安卓手机为什么看不到iso文件 浏览:578
用图片做文件夹图标 浏览:693
java正则表达式语法 浏览:865
美图秀在线压缩图片 浏览:184
苹果自带控制app是什么 浏览:906
孩子学编程怎么样 浏览:589
网络编程经典书籍 浏览:612
曲靖创建网站java程序员 浏览:690
256位加密中是什么意思 浏览:97
php多维数组去重 浏览:308
做程序员这一行储备人才怎么看 浏览:460
参加密逃文 浏览:327
苹果编程语言ios 浏览:763
求解病态系统常用的算法 浏览:993
驾校用的app叫什么 浏览:219
数控编程线的缠绕方法 浏览:972
安卓线性布局怎么设计计算器布局 浏览:24
拓本pdf 浏览:79
2017法硕指南pdf 浏览:295