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;

}

相关推荐
崔庆才丨静觅6 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
你撅嘴真丑7 小时前
第九章-数字三角形
算法
passerby60617 小时前
完成前端时间处理的另一块版图
前端·github·web components
uesowys7 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
掘了7 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅7 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
ValhallaCoder7 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮7 小时前
AI 视觉连载1:像素
算法
崔庆才丨静觅8 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
智驱力人工智能8 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算