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;

}

相关推荐
却尘9 分钟前
Next.js 请求最佳实践 - vercel 2026一月发布指南
前端·react.js·next.js
ccnocare10 分钟前
浅浅看一下设计模式
前端
Lee川14 分钟前
🎬 从标签到屏幕:揭秘现代网页构建与适配之道
前端·面试
Jay Kay27 分钟前
GVPO:Group Variance Policy Optimization
人工智能·算法·机器学习
Epiphany.55638 分钟前
蓝桥杯备赛题目-----爆破
算法·职场和发展·蓝桥杯
Ticnix40 分钟前
ECharts初始化、销毁、resize 适配组件封装(含完整封装代码)
前端·echarts
纯爱掌门人43 分钟前
终焉轮回里,藏着 AI 与人类的答案
前端·人工智能·aigc
twl1 小时前
OpenClaw 深度技术解析
前端
崔庆才丨静觅1 小时前
比官方便宜一半以上!Grok API 申请及使用
前端
星光不问赶路人1 小时前
vue3使用jsx语法详解
前端·vue.js