#include"stdlib.h"
typedef struct listnode{
char* data;
struct listnode* front;
struct listnode* next;
}listnode;
listnode* init()
{
listnode* head = (listnode*)malloc(sizeof(listnode));
if (head == NULL){ return; }
head->data = NULL;
head->front = head;
head->next = head;
return head;
}
listnode* createnode(char* value)
{
if (value == NULL){ return; }
listnode* tmp =init();
tmp->data = value;
return tmp;
}
//当pos为0或者大于等于length+1时,是尾端插入,当pos为1时,是头端插入
void insert(listnode* list, char* value, int pos)
{
if (list == NULL || value == NULL || pos<0){ return; }
int length = getlength(list);
if (pos > length + 1){ pos = length + 1; }
listnode* tmp = list;
for (int i = 0; i < pos; i++)
{
tmp = tmp->next;
}
listnode* insertnode = createnode(value);
insertnode->next = tmp;
insertnode->front = tmp->front;
tmp->front->next = insertnode;
tmp->front = insertnode;
}
//pos为0或者大于等于length时,为尾端删除,pos等于1时为头段删除
void delete(listnode* list, int pos)
{
if (list == NULL ||pos<0){ return; }
int length = getlength(list);
if (pos> length||pos==0 ){ pos = length ; }
listnode* tmp = list;
for (int i = 0; i < pos; i++)
{
tmp = tmp->next;
}
tmp->front->next = tmp->next;
tmp->next->front = tmp->front;
free(tmp);
}
//将list2合并到list1末尾
void combine(listnode* list1, listnode* list2)
{
if (list1 == NULL || list2 == NULL){ return; }
list1->front->next = list2->next;
list2->next->front = list1->front;
list2->front->next = list1;
list1->front = list2->front;
free(list2);
}
void printbynextlink(listnode* list)
{
if (list == NULL){ return; }
listnode* tmp = list;
for (int i = 0; i < getlength(list); i++)
{
tmp = tmp->next;
printf("%s\n", tmp->data);
}
}
void printbyfrontlink(listnode* list)
{
if (list == NULL){ return; }
listnode* tmp = list;
for (int i = 0; i < getlength(list); i++)
{
tmp = tmp->front;
printf("%s\n", tmp->data);
}
}
int getlength(listnode* list)
{
if (list == NULL){ return; }
listnode* tmp = list;
int i = 0;
for (; tmp->next != list; i++)
{
tmp = tmp->next;
}
return i;
}
void main00(){
listnode* list = init();
insert(list,“aaa”,0);
insert(list, “bbb”, 1);
insert(list, “ccc”, 100);
insert(list, “ddd”, 2);
printbynextlink(list);
printf(“\n");
//printbyfrontlink(list);
delete(list,2);
printbynextlink(list);
system(“pause”);
}
void main(){
listnode* list1 = init();
insert(list1, “aaa”, 0);
insert(list1, “bbb”, 1);
insert(list1, “ccc”, 100);
insert(list1, “ddd”, 2);
printbynextlink(list1);
printf("\n");
listnode* list2 = init();
insert(list2, “eee”, 0);
insert(list2, “fff”, 1);
insert(list2, “ggg”, 100);
insert(list2, “hhh”, 2);
printbynextlink(list2);
printf("_\n”);
combine(list1,list2);
printbynextlink(list1);
system(“pause”);
}