【数据结构】单链表就地逆置算法C语言

简介: 【数据结构】单链表就地逆置算法C语言

单链表就地逆置算法

程序样例


在C语言中为了减少时间和空间,对单链表采用就地逆置的方法,话不多说,完整代码如下。

#include<stdio.h>
#include<malloc.h>
#define LEN sizeof (struct Node)
struct Node
{
  int data;//定义数据域
  struct Node *next;//定义指针域
   int length;//记录顺序表的长度
};
//建立动态链表
struct Node *crt_list()                        
{
  struct Node *h, *p,*q;
  int n;
  h=(struct Node *)(malloc(LEN));
  q=h;
  printf("请输入一串整型数据(-1结束输入):\n");
  scanf("%d",&n);//输入数据
  while(n!=-1)
  {
    p=(struct Node*)(malloc(LEN));
    p->data=n;
    q->next=p;//联接头节点
    q=p;//指针移动
    scanf("%d",&n);//再次输入数据
  }
  q->next=NULL;//条件为假,退出循环,将最后一个节点标志为尾结点
  return h;
}
//输出链表
void prt_list(struct Node *h)                    
{
  struct Node *p;
  p=h->next;//指向第一个节点
  if(p==NULL)
      printf("Linked list is null\n");
  else 
      while(p!= NULL)
      {
        printf("%d",p->data);//输出数据
        p=p->next;//指针移动
      }
}
//就地逆置
void NiZhi_list(struct Node *h)           
{
  struct Node *p,*q,*x;
  p=h->next;
  h->next=NULL;
  while(p!=NULL)
  {
    q=p;
    p=p->next;
    q->next=h->next;
    h->next=q;
  }
  x=h->next;
  if(x==NULL)
    printf("链表为空");
  else
    while(x!=NULL)
    {
      printf("%d",x->data);
      x=x->next;
    }
}
void main()
{
  struct Node *head; //定义一个结构体头指针
  head=crt_list();//head指向建立的链表
  printf("当前链表为: \n");
  prt_list(head);                  
  printf("\n");
  printf("就地逆置后的链表为: \n");
  NiZhi_list(head);
  printf("\n");
}

程序样例


目录
相关文章
|
3天前
|
算法
数据结构中的KMP算法及其改进算法
KMP算法通过引入部分匹配表,有效避免了重复计算,从而将字符串匹配的时间复杂度降低到O(m+n)。通过进一步优化next数组,KMP算法的效率得到了进一步提升。对于大规模字符串匹配问题,KMP算法及其改进算法提供了高效的解决方案,是计算机科学领域的经典算法之一。
10 3
|
2天前
|
C语言 C++
【数据结构】C语言实现:栈(Stack)与队列(Queue)
【数据结构】C语言实现:栈(Stack)与队列(Queue)
|
9天前
|
存储 算法
数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)
数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)
11 0
|
9天前
|
存储 算法 NoSQL
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
11 1
|
9天前
|
算法
数据结构和算法——散列函数的构造方法(直接定址法、除留余数法、数字分析法、折叠法、平方取中法、ASCII码加和法、前三字符移位法)
数据结构和算法——散列函数的构造方法(直接定址法、除留余数法、数字分析法、折叠法、平方取中法、ASCII码加和法、前三字符移位法)
6 0
|
9天前
|
存储 算法
数据结构和算法——了解哈希表(哈希查找、散列的基本思想)
数据结构和算法——了解哈希表(哈希查找、散列的基本思想)
12 0
|
22小时前
|
算法 JavaScript 决策智能
基于禁忌搜索算法的TSP路径规划matlab仿真
**摘要:** 使用禁忌搜索算法解决旅行商问题(TSP),在MATLAB2022a中实现路径规划,显示优化曲线与路线图。TSP寻找最短城市访问路径,算法通过避免局部最优,利用禁忌列表不断调整顺序。关键步骤包括初始路径选择、邻域搜索、解评估、选择及禁忌列表更新。过程示意图展示搜索效果。
|
22小时前
|
机器学习/深度学习 算法
基于BP神经网络和小波变换特征提取的烟草香型分类算法matlab仿真,分为浓香型,清香型和中间香型
```markdown 探索烟草香型分类:使用Matlab2022a中的BP神经网络结合小波变换。小波分析揭示香气成分的局部特征,降低维度,PCA等用于特征选择。BP网络随后处理这些特征,以区分浓香、清香和中间香型。 ```
|
2天前
|
机器学习/深度学习 算法
m基于PSO-GRU粒子群优化长门控循环单元网络的电力负荷数据预测算法matlab仿真
摘要: 在MATLAB 2022a中,对比了电力负荷预测算法优化前后的效果。优化前为&quot;Ttttttt111222&quot;,优化后为&quot;Tttttttt333444&quot;,明显改进体现为&quot;Tttttttttt5555&quot;。该算法结合了粒子群优化(PSO)和长门控循环单元(GRU)网络,利用PSO优化GRU的超参数,提升预测准确性和稳定性。PSO模仿鸟群行为寻找最优解,而GRU通过更新门和重置门处理长期依赖问题。核心MATLAB程序展示了训练和预测过程,包括使用&#39;adam&#39;优化器和超参数调整,最终评估并保存预测结果。
4 0
|
3天前
|
算法 安全
基于龙格库塔算法的SIR病毒扩散预测matlab仿真
该程序使用龙格库塔算法实现SIR模型预测病毒扩散,输出易感、感染和康复人群曲线。在MATLAB2022a中运行显示预测结果。核心代码设置时间区间、参数,并定义微分方程组,通过Runge-Kutta方法求解。SIR模型描述三类人群动态变化,常微分方程组刻画相互转化。模型用于预测疫情趋势,支持公共卫生决策,但也存在局限性,如忽略空间结构和人口异质性。