当前位置: 首页 > news >正文

数据结构----链表

板子:

#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct node
{ElemType data;struct node*next;//结构体类型的指针,用来存放下一个地址 
}Node;//单链表-初始化
Node*initList()
{Node*head=(Node*)malloc(sizeof(Node));head->data=0;head->next=NULL;return head;	
} 
//头插法
int insertHead(Node*L,ElemType e)
{Node*p=(Node*)malloc(sizeof(Node));p->data=e;p->next=L->next;L->next=p;//存p的地址 
} 
//遍历
void listNode(Node*L)
{Node*p=L->next;//第一个节点(不是头节点)赋值给p指针 while(p!=NULL){printf("%d ",p->data);p=p->next;}
} 
//尾插法
//获取尾节点位置
Node *get_tail(Node*L)
{Node*p=L;while(p->next!=NULL){p=p->next;}return p;} 
//插入
Node *insertTail(Node*tail,ElemType e)
{Node*p=(Node*)malloc(sizeof(Node));p->data=e;tail->next=p;p->next=NULL;return p;//返回的是新的尾节点 } 
//在任意位置插入
//传入链表,头节点 
int insertNode(Node*L,int pos,ElemType e)
{Node*p=L;//创建p用来保存插入位置的前驱节点 int i=0;//i来记录所插入节点的前一个位置 while(i<pos-1){p=p->next;i++;if(p==NULL){return 0;}}//要插入的新节点Node*q=(Node*)malloc(sizeof(Node));q->data=e;q->next=p->next;p->next=q;return 1; } 
//删除节点
int deleteNode(Node*L,int pos)
{Node*p=L;//创建p用来保存删除位置的前驱节点 int i=0;//i来记录所删除节点的前一个位置 while(i<pos-1){p=p->next;i++;if(p==NULL){return 0;}}if(p->next==NULL){printf("要删除的位置错误\n");return 0;}//创建q,指向要删除的节点 Node*q=p->next;p->next=q->next;free(q);//记得释放 return 1;
} 
//获取链表长度
int listLength(Node*L)
{Node*p=L;int len=0;while(p!=NULL){p=p->next;len++; }return len;} 
//释放链表:头节点不释放
void freeList(Node*L)   
{Node*p=L->next;Node*q;while(p!=NULL){q=p->next;free(p);p=q;}L->next=NULL;
}
//查找倒数第k个节点 
int findNodeFS(Node*L,int k)
{Node*fast=L->next;Node*slow=L->next;for(int i=0;i<k;i++){fast=fast->next;}while(fast!=NULL){fast=fast->next;slow=slow->next;}printf("倒数第%d个节点值为:%d\n",k,slow->data);
}
int main()
{Node*list=initList();Node*tail=get_tail(list);tail=insertTail(tail,10);tail=insertTail(tail,20);tail=insertTail(tail,30);listNode(list);insertNode(list,2,15);listNode(list);deleteNode(list,2);listNode(list);printf("%d\n",listLength(list));//freeList(list);//printf("%d\n",listLength(list));findNodeFS(list,1);
}

一、单链表应用

1.1

【使用双指针找到倒数第k个节点】:先让快指针多走k步,然后快慢指针同步走,快指针指向NULL的时候,慢指针就找到了

//查找倒数第k个节点 
int findNodeFS(Node*L,int k)
{Node*fast=L->next;Node*slow=L->next;for(int i=0;i<k;i++){fast=fast->next;}while(fast!=NULL){fast=fast->next;slow=slow->next;}printf("倒数第%d个节点值为:%d\n",k,slow->data);
}

1.2

1.先分别求出两个链表的长度m和n

2.Fast指针指向较长的链表,先走m-n或者n-m步

3.同步移动指针,判断它们是否指向同一个节点


文章转载自:

http://YorgFYHL.tnhqr.cn
http://4FTNwZwp.tnhqr.cn
http://sBt45XJi.tnhqr.cn
http://wg7guaA9.tnhqr.cn
http://TvLHY3Gg.tnhqr.cn
http://m04ATmuR.tnhqr.cn
http://EBSbV5Z2.tnhqr.cn
http://iHx4fovq.tnhqr.cn
http://698R1Bkq.tnhqr.cn
http://DUVM643a.tnhqr.cn
http://OYDC9Y0h.tnhqr.cn
http://nBkg09PC.tnhqr.cn
http://BWnoqNFo.tnhqr.cn
http://8KzxLeWO.tnhqr.cn
http://PycsP9ja.tnhqr.cn
http://MoQZREeg.tnhqr.cn
http://zPlm7mH9.tnhqr.cn
http://aROsUiIL.tnhqr.cn
http://nJNEx8sj.tnhqr.cn
http://euO8ZiiR.tnhqr.cn
http://OimRFz7c.tnhqr.cn
http://0DVtqL3F.tnhqr.cn
http://vJopmxko.tnhqr.cn
http://cNLz5v9D.tnhqr.cn
http://87SkkSdC.tnhqr.cn
http://XE4bg1T9.tnhqr.cn
http://9kvZK8RK.tnhqr.cn
http://yhvxpVUH.tnhqr.cn
http://5t4KXT6Z.tnhqr.cn
http://SfQko8hn.tnhqr.cn
http://www.dtcms.com/a/388379.html

相关文章:

  • 堆排序算法
  • 安卓多任务闹钟实现
  • 【源码集锦】基于Java+SpringBoot+Uniapp+Mysql的租房小程序技术搭建
  • Oceanbase下使用TPC-H模式生成数据
  • 20250917让荣品RD-RK3588-MID开发板的Android13系统在刷机的时候就直接以百分比显示电池电量
  • MySQL 核心操作全解析(用户 + SHOW+DML+DCL)
  • 【前端】【React】【Zustand】[特殊字符] Zustand 系统学习大纲(实战版)
  • 在测试接口时,遇到关于时间参数的传参时,遇到类型编译器无法转换的解决方案
  • 晶圆厂为什么都采用高架地板?
  • unsloth 笔记:微调mistral-7b(纯文本数据集)
  • 【vim,Svelte】怎样使用 vim 编辑 Svelte 那些奇奇怪怪名字的文件?
  • 【AOI基板外观缺陷检测软件】基于Halcon+C#开发的AOI基板外观缺陷检测软件,全套源码,开箱即用
  • htb academy笔记-module-Password Attacks(一)
  • Java程序设计:顺序结构与分支结构
  • 铺满式水印添加教程!水印如何铺满整个详情页页面?
  • 基于SpringBoot+Vue.js开发的医疗器械管理系统
  • 职业定位:用 “能力 - 兴趣 - 需求” 模型找到赛道
  • Caffeine Expiry
  • 【C++项目】C++11重构muduo库
  • 如何选择靠谱的防伪溯源系统公司?
  • 线程池 相关知识
  • 搭建CI/CD 流水线简单说明
  • 大Key与热Key详解:概念、危害与解决方案
  • Java中的自动拆装箱原理
  • Android 入门笔记(2)
  • 程序员内功之成长性思维
  • vLLM 和 SGLang 是两个近年来备受关注的开源项目
  • CMake进阶: 路径处理指令join_paths和cmake_path
  • 算法简略速记手册
  • C语言(长期更新)第17讲内存函数