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;

}

相关推荐
Jerry3 分钟前
Compose 从 View 系统迁移
前端
IT码农-爱吃辣条18 分钟前
Three.js 初级教程大全
开发语言·javascript·three.js
GIS之路23 分钟前
2025年 两院院士 增选有效候选人名单公布
前端
四岁半儿25 分钟前
vue,H5车牌弹框定制键盘包括新能源车牌
前端·vue.js
烛阴37 分钟前
告别繁琐的类型注解:TypeScript 类型推断完全指南
前端·javascript·typescript
gnip1 小时前
工程项目中.env 文件原理
前端·javascript
猿究院--王升1 小时前
jvm三色标记
java·jvm·算法
JefferyXZF1 小时前
Next.js Server Actions 详解: 无缝衔接前后端的革命性技术(八)
前端·全栈·next.js
一车小面包1 小时前
逻辑回归 从0到1
算法·机器学习·逻辑回归
JohnYan2 小时前
工作笔记 - CentOS7环境运行Bun应用
javascript·后端·容器