单循环链表
区别:单向循环链表中,尾结点的next指向头结点,头结点的next指向尾结点,形成一个循环
初始化链表
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *initList() {
Node *list = (Node*)malloc(sizeof(Node));
list -> next = list;//因为是循环,所以下一个节点指向自己
return list;
}
int main()
{
Node *list = initList();
return 0;
}
增加节点
头插法
void headInsert (Node* list, int data) {
Node* p = (Node*)malloc(sizeof(Node));
p -> data = data;
p -> next = list -> next;
list -> next = p;
list -> data++;
}
尾插法
void tailInsert (Node* list, int data) {
Node* n = list;
Node* p = (Node*)malloc(sizeof(Node));
p -> data = data;
while (n -> next != list) {
n = n -> next;
}
n -> next = p;
p -> next = list;
list -> data++;
}
删除节点
int deleteNode (Node* list, int data) {
Node* pre = list;
Node* current = list -> next;
while (curent != list) {
if (current -> data == data) {
pre -> next = current -> next;
free(current);
list -> data--;
return TRUE;
}
pre = current;
current = current -> next;
}
return FALSE;
}
遍历列表
void printList(Node* list) {
Node* p = list -> next;
while (p != list) {
printf("%d->", p -> data);
p = p -> next;
}
printf("NULL\n");
}