ListNode.h
#include<stdio.h>
#include<assert.h>
typedef int DataType;
typedef struct ListNode
{
DataType _data;
struct ListNode* _last;
struct ListNode* _next;
}ListNode;
typedef struct List
{
ListNode* head;
}List;
ListNode* CreatListNode(DataType x);//创建节点
void ListNodeInit(List* list);//初始化
void ListPushFront(List* list, DataType x);//头插
void ListPushBack(List* list, DataType x);//尾插
void ListPopFront(List* list);//头删
void ListPopBack(List* list);//尾删
void ListInsert(List* list,ListNode* pos, DataType x);//在pos前插入
void ListErase(List* list, List* pos);//删除pos节点;
void ListDestory(List* List);//销毁链表
void ListPrint(List* list);//打印链表
ListNode.c
#include"ListNode.h"
//创建节点
ListNode* CreatListNode(DataType x) {
ListNode* NewListNode = (ListNode*)malloc(sizeof(ListNode));
NewListNode->_data = x;
NewListNode->_last = NULL;
NewListNode->_next = NULL;
return NewListNode;
}
//初始化
void ListNodeInit(List* list) {
assert(list);
list->head = CreatListNode(0);
list->head->_last = list->head;
list->head->_next = list->head;
}
//头插
void ListPushFront(List* list, DataType x) {
assert(list);
/ListNode NewNode = CreatListNode(x);
ListNode* cur = list->head->_next;
NewNode->_next = cur;
cur->_last = NewNode;
list->head->_next = NewNode;
NewNode->_last = list->head;/
ListInsert(list, list->head->_next, x);
}
//尾插
void ListPushBack(List list,DataType x) {
assert(list);
/ListNode NewNode = CreatListNode(x);
ListNode* Tail=list->head->_last;
Tail->_next = NewNode;
NewNode->_last = Tail;
NewNode->_next = list->head;
list->head->_last = NewNode;/
ListInsert(list, list->head, x);
}
//头删
void ListPopFront(List list) {
assert(list);
/ListNode Tail = list->head->_next;
list->head->_next = Tail->_next;
Tail->_next->_last = list->head;
free(Tail);/
ListErase(list, list->head->_next);
}
//尾删
void ListPopBack(List list) {
assert(list);
/ListNode cur = list->head->_last;
cur->_last->_next = list->head;
list->head->_last = cur->_last;
free(cur);/
ListErase(list, list->head->_last);
}
//在pos前进行插入
void ListInsert(List list,ListNode* pos, DataType x) {
assert(list&&pos);
ListNode* Tail = pos->_last;
ListNode* NewNode = CreatListNode(x);
Tail->_next = NewNode;
NewNode->_last = Tail;
NewNode->_next = pos;
pos->_last = NewNode;
}
//删除pos节点
void ListErase(List* list, ListNode* pos) {
assert(list && pos);
ListNode* Tail = pos->_next;
ListNode* cur = pos->_last;
Tail->_last = cur;
cur->_next = Tail;
free(pos);
}
//销毁链表
void ListDestory(List* list) {
assert(list);
ListNode* cur = list->head->_next;
while (cur != list->head) {
ListNode* NewNode = cur->_next;
free(cur);
cur = NewNode;
}
free(list->head);
}
//打印
void ListPrint(List* list) {
assert(list);
ListNode* cur = list->head->_next;
while (cur!=list->head) {
printf("%d->", cur->_data);
cur = cur->_next;
}
}
void testList() {
List list;
ListNode* pos;
ListNodeInit(&list);
ListPushBack(&list, 1);
ListPushBack(&list, 2);
ListPushBack(&list, 3);
ListPushBack(&list, 4);
ListPushFront(&list, 0);
ListPushFront(&list, -1);
ListPushFront(&list, -2);
ListPrint(&list);
}
int main() {
testList();
return 0;
}