当前位置:首页 » 编程语言 » 链表反转c语言

链表反转c语言

发布时间: 2025-08-10 22:43:40

① 用C语言编一个程序:两个递增有序链表合并成一个递减链表,

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

typedef struct node
{
int data;
struct node *next;
}node,*list;
void init(list &head)
{
head=(list)malloc(sizeof(node));
head->next=NULL;
}

void input(list &h)
{
list p,q;
q=h;
printf("输入数据的个数 n : ");
int n;
scanf("%d",&n);
printf("请输入 %d 个有序递增数据:\n",n);
for (int i=0;i<n;i++)
{
// printf("第 %d 个: ",i+1);
p=(list)malloc(sizeof(node));
scanf("%d",&p->data);
p->next=q->next;
q->next=p;
q=p;
}
}

void output(list h)
{
list p;
p=h->next;
printf("输出数据\n");
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}

void combine(list &a,list &b,list &c)
{
list p,q,t;
p=a->next;
q=b->next;
free(b);
b=q;
c=a;
a=p;
c->next=NULL;
while(p&&q)
{
if (p->data<=q->data)
{
a=a->next;
p->next=c->next;
c->next=p;
p=a;
}
else
{
b=q->next;
q->next=c->next;
c->next=q;
q=b;
}
}
if (p!=NULL)
{
while(p)
{
a=a->next;
p->next=c->next;
c->next=p;
p=a;
}
}
if (q!=NULL)
{
while(q)
{
b=q->next;
q->next=c->next;
c->next=q;
q=b;
}
}

}
void main()
{
list a,b,c;
init(a);init(b);
printf("\n输入链表A :\n");
input(a);
printf("\n输入链表B :\n");
input(b);

printf("输出合并后的链表:\n");
combine(a,b,c);
output(c);
}
结果:
输入链表A :
输入数据的个数 n : 3
请输入 3 个有序递增数据:
4 5 9

输入链表B :
输入数据的个数 n : 4
请输入 4 个有序递增数据:
2 3 7 10

输出合并后的链表:
输出数据
10 9 7 5 4 3 2
Press any key to continue

② C语言必背100代码,C语言必会100代码大全

对于C语言初学者而言,掌握基础的关键代码至关重要。本文汇总了100个C语言必备代码示例,旨在帮助你快速上手和理解编程逻辑。以下是部分内容概要:



  • 1. 简单输出:通过C语言编写九九乘法表,理解循环和条件语句的应用。

  • 2. 数组处理:实现4x4数组的逆时针旋转,锻炼数组操作和逻辑思维。

  • 3. 数学问题:用C解决兔子繁殖问题,探索递归和数列的概念。

  • 4. 素数检测:编写程序判断并输出101-200之间的素数,学习基本算法设计。

  • 5. 完数查找:编写代码找出1000以内的完数,理解因子和数学规律。

  • 6. 三角形打印:打印直角杨辉三角,练习控制台输出和图形表示。

  • 7. 平均成绩计算:输入成绩计算学生和课程的平均值,涉及输入处理和数组操作。

  • 8. 反向字符串:实现字符串反转,练习指针和字符操作。

  • 9-11. 排序算法:包含从大到小和从小到大排序,掌握基本排序方法。

  • 12. 字符串替换:编写函数实现字符串替换,了解字符串处理函数。

  • 13. 查找子串:理解字符串搜索算法,用C语言查找指定子串。

  • 14-15. 结构体和链表:使用指针操作结构体数组和创建简单链表,接触数据结构。

  • 16. 冒泡排序:实现冒泡排序,锻炼代码优化和算法实现。

  • 17. 回文判断:输入字符串并检查是否为回文,练习字符串比较。

  • 18. 函数编写:计算π的近似值,学习函数设计和精度控制。


这些代码涵盖了C语言的基础操作,通过不断实践和理解,你将逐渐熟悉和掌握C语言的核心概念。

③ C语言反转链表的递归算法

/*在你递归之后的p一定要p->next=NULL;就可以了整个修改后的程序如下:(vs2005下运行正常)*/
#include <stdio.h>
#include<stdlib.h>
#include <malloc.h>
#include<conio.h>

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

node *createList()
{
node *pre, *cur, *head;
int temp;
head = (node *)malloc(sizeof(node));
if(head == NULL)
{
printf("Malloc failed!\n");
exit(0);
}
head->data = 0;
head->next = NULL; /*这样负值效率较低,绝大部分都在做无用功,
只要在这个for循环后把最后一个赋予NULL就可以了*/
pre = head;
printf("Input data:");
scanf("%d", &temp);
while(temp!=0)
{
cur = (node *)malloc(sizeof(node));
if(cur == NULL)
{
printf("Malloc failed!\n");
exit(0);
}
cur->data = temp;
cur->next = NULL;
pre->next = cur;
pre = cur;
printf("Input data:");
scanf("%d", &temp);
}
return head;
}
void printList(node **head)/*实际上形参为 node * head就可以了,不知道你为啥这么写,没必要*/
{
node *temp;
temp = (*head)->next;
if(head == NULL)
return;
while(temp)
{
printf("\t%d", temp->data);
temp = temp->next;
}
printf("\nOutput complete!\n");
}
node *reverseRecursive(node *p, node *head)
{
node *temp ;
if(p->next == NULL)
{
head->next = p;
return p;
}
temp= reverseRecursive(p->next, head);
temp->next = p;
p->next=NULL;/*这里要个p的指针域赋予NULL*/
return p;
}
int main()
{
node *head = NULL;
head = createList();
printList(&head);
/*ReverseLink(head);*/
reverseRecursive(head->next, head);
printList(&head);
getch();
return 0;
}

④ 史上最全单链表的增删改查反转等操作汇总以及5种排序算法(C语言)

史上最全单链表的增删改查反转等操作汇总以及5种排序算法

一、单链表的基本操作

  1. 创建链表

    • 通过特定函数创建链表,并初始化头节点和尾节点。
  2. 打印链表

    • 使用循环遍历链表,打印每个节点的值。
  3. 插入元素

    • 头部插入:在链表头部插入新节点。
    • 中间插入:在链表的指定位置插入新节点。
    • 尾部插入:在链表尾部插入新节点。
  4. 删除元素

    • 根据节点值或位置删除链表中的节点,需考虑头尾节点的特殊情况。
  5. 查找元素

    • 根据值在链表中进行查找,返回节点的位置或指针。
  6. 修改元素

    • 根据位置修改链表中指定位置元素的值。
  7. 链表长度

    • 计算链表的长度。
  8. 节点查找

    • 查找指定位置的前驱节点和后继节点。

二、链表反转

  • 调整链表结构,使链表元素逆序排列。

三、判断链表是否有环

  • 通过算法检测链表中是否存在环状结构。

四、排序算法

  1. 冒泡排序

    • 重复遍历链表,比较相邻节点并交换值,直到链表有序。
  2. 选择排序

    • 每次从未排序部分选择最小的节点,将其放到已排序部分的末尾。
  3. 插入排序

    • 构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
  4. 归并排序

    • 将链表分成两半,递归地对每半部分进行排序,然后将两个有序链表合并成一个。
  5. 快速排序

    • 选择一个基准节点,将链表分成两部分,小于基准的节点放在基准前面,大于基准的节点放在基准的后面,然后递归地对这两部分排序。

以上内容涵盖了单链表的基本操作以及五种常见的排序算法,这些算法在C语言中都有相应的实现方式。如需具体代码实现,可参考相关数据结构教程或源码库。

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:585
制作脚本网站 发布:2025-10-20 08:17:34 浏览:881
python中的init方法 发布:2025-10-20 08:17:33 浏览:574
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:761
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:677
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1005
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:250
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:108
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:799
python股票数据获取 发布:2025-10-20 07:39:44 浏览:705