c语言链表的简单实现
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkNode
{
int val;
struct LinkNode* next;
}LinkNode;
LinkNode* head = NULL;
LinkNode* tail = NULL;
void addTail(int data)
{
LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
newNode->val = data;
newNode->next = NULL;
if (head == NULL)
head = newNode;
else
tail->next = newNode;
tail = newNode;
}
void insert_node(int index, int data)
{
LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
newNode->val = data;
LinkNode* pre = head;
if (index == 0)
{
newNode->next = head;
head = newNode;
}
else
{
int i = 0;
while (i < index - 1)
{
pre = pre->next;
i++;
}
newNode->next = pre->next;
pre->next = newNode;
if (newNode->next == NULL)
tail = pre;
}
}
void deleteVal(int data)
{
LinkNode* pre = head;
LinkNode* cur = head->next;
if (pre->val == data)
{
head = head->next;
free(pre);
}
else
{
while (cur->next)
{
if (cur->val == data)
break;
pre = pre->next;
cur = pre->next;
}
pre->next = cur->next;
if (cur->next == NULL)
{
cur = NULL;
pre->next = NULL;
}
free(cur);
}
}
void deleteInd(int index)
{
LinkNode* pre = head;
if (index >= count() || index < 0)
return;
if (index == 0)
{
head = head->next;
free(pre);
}
else
{
int i = 0;
while (i < index - 1)
{
pre = pre->next;
i++;
}
LinkNode* temp = pre->next;
pre->next = pre->next->next;
if (temp->next == NULL)
tail = pre;
free(temp);
}
}
void show()
{
LinkNode* pre = head;
while (pre)
{
printf("%d", pre->val);
pre = pre->next;
}
printf("\n");
}
int count()
{
LinkNode* pre = head;
int count = 0;
while (pre)
{
pre = pre->next;
printf("%d\n", count);
count++;
}
return count;
}
int main(void)
{
addTail(1);
addTail(2);
addTail(3);
addTail(4);
deleteVal(4);
show();
return 0;
}