#include <stdio.h>
#include "LinkList.h"
#pragma warning(disable : 4996)
#define N 10
int main()
{
int arr[N];
int index;
int val;
printf("输入10个数据:");
for (int i = 0; i < N; i++)
{
scanf("%d", &arr[i]);
}
Node* head = list_create_head(arr, 10);
Node* head2 = list_create_tail(arr, 10);
list_print(head);
list_print(head2);
printf("输入插入一个元素的位置和值(index,value):");
scanf("%d%d", &index, &val);
list_insert(head, index, val);
list_print(head);
printf("输入要删除元素的位置(index):");
scanf("%d", &index);
list_remove(head, index);
list_print(head);
printf("输入要得到元素的位置(index):");
scanf("%d", &index);
Type t1=list_get(head, index);
printf("%d \n", t1);
printf("输入修改一个元素的位置和值(index,value):");
scanf("%d%d", &index, &val);
list_update(head, index, val);
list_print(head);
return 0;
}
linkList.h
#include <cstdlib>
typedef int Type;
struct Node
{
Type data;
Node* next;
};
Node* list_init(Type t);
Node* list_create_head(Type arr[], int n);
Node* list_create_tail(Type arr[], int n);
void list_print(Node* head);
void list_insert(Node* &head, int index, Type val);
void list_remove(Node* head, int index);
Type list_get(Node* head, int index);
void list_update(Node* head, int index, Type val);
linkList.cpp
#include "linkList.h"
#include <stdio.h>
#include <assert.h>
#define LOG(log) printf("\n%s: %s %s %d \n",log __FILE__,__FUNCTIONW__,__LINE__);
Node* list_init(Type t)
{
Node* temp = (Node*)malloc(sizeof(Node));
if (temp == NULL)
{
LOG("内存申请失败:");
return NULL;
}
temp->data = t;
temp->next = NULL;
return temp;
}
Node* list_create_head(Type arr[], int n)
{
Node* head = NULL;
for (int i = 0; i < n; i++)
{
if (head == NULL)
{
head= list_init(arr[i]);
continue;
}
Node* t = list_init(arr[i]);
t->next = head;
head = t;
}
return head;
}
Node* list_create_tail(Type arr[], int n)
{
Node* head = NULL;
Node* tail = NULL;
for (int i = 0; i < n; i++)
{
if (head == NULL)
{
head = list_init(arr[i]);
tail = head;
continue;
}
Node* t = list_init(arr[i]);
tail->next = t;
tail = t;
}
return head;
}
void list_print(Node* head)
{
Node* t = head;
while (t != NULL)
{
printf("%d -> ", t->data);
t = t->next;
}
printf("NULL\n");
}
void list_insert(Node* &head, int index, Type val)
{
Node* temp = head;
if (index == 0)
{
/*Node* t = (Node*)malloc(sizeof(Node));
t->data = head->data;
head->data = val;
t->next = head->next;
head->next = t;*/
Node* t = list_init(val);
t->next = head;
head = t;
return;
}
for (int i = 1; i < index; i++)
{
assert(temp);
temp = temp->next;
}
Node* t = (Node*)malloc(sizeof(Node));
t->data = val;
t->next = temp->next;
temp->next = t;
}
void list_remove(Node* head, int index)
{
Node* temp = head;
if (index == 0)
{
head = head->next;
free(temp);
return;
}
for (int i = 1; i < index; i++)
{
assert(temp);
temp = temp->next;
}
Node* t = temp->next;
temp->next = temp->next->next;
free(t);
}
Type list_get(Node* head, int index)
{
Node* temp = head;
for (int i = 0; i < index; i++)
{
assert(temp);
temp = temp->next;
}
return temp->data;
}
void list_update(Node* head, int index, Type val)
{
Node* temp = head;
for (int i = 0; i < index; i++)
{
assert(temp);
temp = temp->next;
}
temp->data = val;
}