#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;
}