數據結構
鏈表:指針方法,頭插法
#include <stdio.h>
#include <stdlib.h>
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
typedef struct List{
ListNode *head;
int size;
}List;
void BuildList(List *list)
{
if(list&&list->head == NULL)
{
list->head = (ListNode *)malloc(sizeof(ListNode));
list->head->next = NULL;
list->size = 0;
}
}
void Insert(List *list, int val)
{
if(list)
{
ListNode *node = (ListNode *)malloc(sizeof(ListNode));
node->val = val;
node->next = list->head->next;
list->head->next = node;
list->size++;
}
}
void Delete(List *list, int val)
{
if(list&&list->head)
{
ListNode *p = list->head;
while(p->next)
{
if(p->next->val == val)
{
ListNode *q = p->next;
p->next = q->next;
free(q);
list->size--;
return;
}
p = p->next;
}
}
}
void PrintList(List *list)
{
if(list&&list->head)
{
ListNode *p = list->head->next;
printf("List: ");
while(p)
{
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}
}
int main(void)
{
List list;
list.head = NULL;
list.size = 0;
BuildList(&list);
Insert(&list, 1);
Insert(&list, 2);
Insert(&list, 3);
PrintList(&list);
Delete(&list, 2);
PrintList(&list);
return 0;
}

數組方法:
用e[idx]存儲值,ne[idx]存儲下一個目標
void add(int k,int val)
{
e[idx] = val;
ne[idx] = ne[k];
ne[k] = idx;
}
void delete(int k)
{
int idx = head;
//遍歷
while(ne[idx) != -1)
{
if(ne[idx] == k)
{
ne[idx] = ne[k];
break;
}
idx = ne[idx];
}
}
實際中使用c++ vector,因為每次malloc(1)大小的太費時間,內存碎片化,會先malloc一大片空間