有头节点的单循环链表
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
int data;
struct Node *next;
} Node;
Node *initList()
{
Node *LoopList = (Node *)malloc(sizeof(Node));
if (LoopList == NULL)
{
printf("malloc error");
}
LoopList->data = 0;
LoopList->next = LoopList;
return LoopList;
}
void headInsert(Node *looplist, int data)
{
Node *newNode = (Node *)malloc(sizeof(Node));
if (newNode == NULL)
{
printf("malloc error");
}
newNode->data = data;
newNode->next = looplist->next;
looplist->next = newNode;
looplist->data++;
}
void tailInsert(Node *looplist, int data)
{
Node *node = (Node *)malloc(sizeof(Node));
node->data = data;
Node *n = looplist;
while (n->next != looplist)
{
n = n->next;
}
node->next = looplist;
n->next = node;
looplist->data++;
}
void delete(Node *looplist, int data)
{
Node *pre = looplist;
Node *current = looplist->next;
while (current != looplist)
{
if (current->data == data)
{
pre->next = current->next;
free(current);
break;
}
pre = current;
current = current->next;
}
looplist->data--;
}
void printList(Node *looplist)
{
Node *head = looplist;
Node *current = looplist->next;
while (current != head)
{
printf("%-5d", current->data);
current = current->next;
}
printf("\n");
printf("剩余 %d 个节点\n", looplist->data);
}
int main(int argc, char const *argv[])
{
Node *looplist = initList();
for (int i = 0; i <= 100; i++)
{
tailInsert(looplist, i);
}
delete (looplist, 100);
delete (looplist, 0);
delete (looplist, 50);
printList(looplist);
return 0;
}