707 链表设计

#include<iostream>

using namespace std;

typedef struct ListNode

{

int val;

struct ListNode* next;

}ListNode;

//创建

ListNode* ListCreate()

{

ListNode* head = (ListNode*)malloc(sizeof(ListNode));

head->next = NULL;

return head;

}

//尾部添加

void AddAtTail(ListNode* obj, int val)

{

ListNode* cur = obj;

while(cur->next != NULL)

{

cur = cur->next;

}

ListNode* nTail = (ListNode*)malloc(sizeof(ListNode));

nTail->val = val;

nTail->next = NULL;

cur->next = nTail;

}

//头部添加

void AddAtHead(ListNode* obj, int val)

{

ListNode* nhead = (ListNode*)malloc(sizeof(ListNode));

nhead->val = val;

nhead->next = obj->next;

obj->next = nhead;

}

//指定索引处添加

void AddAtIndex(ListNode* obj, int index, int val)

{

if(index == 0)

{

AddAtHead(obj, val);

return;

}

ListNode* cur = obj->next;

for(int i = 1; cur != NULL; i++)

{

if(i == index)

{

ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));

newNode->val = val;

newNode->next = cur->next;

cur->next = newNode;

return;

}

else

{

cur = cur->next;

}

}

}

//指定索引处删除

void DeleteAtIndex(ListNode* obj, int index)

{

if(index == 0)

{

ListNode* tmp = obj->next;

if(tmp != NULL)

{

obj->next = tmp->next;

free(tmp);

}

return;

}

ListNode* cur = obj->next;

for(int i = 1; cur != NULL && cur->next != NULL; i++)

{

if(i == index)

{

ListNode* tmp = cur->next;

if(tmp != NULL)

{

cur->next = tmp->next;

free(tmp);

}

return;

}

else

{

cur = cur->next;

}

}

}

//全部删除

void ListFree(ListNode* obj)

{

while(obj != NULL)

{

ListNode* tmp = obj;

obj = obj->next;

free(tmp);

}

obj->next = NULL;

}

//修改指定索引的值

void ChangeAtIndex(ListNode* obj, int index, int val)

{

ListNode* cur = obj->next;

for(int i = 0; cur != NULL; i++)

{

if(i == index)

{

cur->val = val;

return;

}

else

{

cur = cur->next;

}

}

}

//查询指定位置的值

int CheckAtIndex(ListNode* obj, int index)

{

ListNode* cur = obj->next;

for(int i = 0; cur != NULL; i++)

{

if(i == index)

{

return cur->val;

}

else

{

cur = cur->next;

}

}

}

int main()

{

ListNode* head = ListCreate();

for(int i = 1; i < 10; i++)

{

//在尾部添加

AddAtTail(head, i);

}

ListNode* obj = head->next;

while(obj != NULL)

{

cout << obj->val << endl;

obj = obj->next;

}

//测试在头部添加

//AddAtHead(head, 100);

//测试在指定位置3添加

//AddAtIndex(head, 3, 300);

//测试在指定位置0添加

//AddAtIndex(head, 0, 0);

//测试在指定位置删除

//DeleteAtIndex(head, 3);

//测试修改指定位置数据

//ChangeAtIndex(head, 3, 0);

//测试查询指定位置的值

int Data = CheckAtIndex(head, 3);

cout << "data = " << Data << endl;

ListNode* obj1 = head->next;

while(obj1 != NULL)

{

cout << obj1->val << endl;

obj1 = obj1->next;

}

return 0;

}

相关推荐
web小白成长日记7 小时前
企业级 Vue3 + Element Plus 主题定制架构:从“能用”到“好用”的进阶之路
前端·架构
じ☆冷颜〃7 小时前
黎曼几何驱动的算法与系统设计:理论、实践与跨领域应用
笔记·python·深度学习·网络协议·算法·机器学习
数据大魔方7 小时前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富
POLITE37 小时前
Leetcode 23. 合并 K 个升序链表 (Day 12)
算法·leetcode·链表
APIshop7 小时前
Python 爬虫获取 item_get_web —— 淘宝商品 SKU、详情图、券后价全流程解析
前端·爬虫·python
楚来客7 小时前
AI基础概念之八:Transformer算法通俗解析
人工智能·算法·transformer
风送雨7 小时前
FastMCP 2.0 服务端开发教学文档(下)
服务器·前端·网络·人工智能·python·ai
XTTX1107 小时前
Vue3+Cesium教程(36)--动态设置降雨效果
前端·javascript·vue.js
Echo_NGC22378 小时前
【神经视频编解码NVC】传统神经视频编解码完全指南:从零读懂 AI 视频压缩的基石
人工智能·深度学习·算法·机器学习·视频编解码
会员果汁8 小时前
leetcode-动态规划-买卖股票
算法·leetcode·动态规划