TailToHead(a);//非递归 时间复杂度n平方
SListPrintTailToHeadR(a);//递归
}
void Test2()//2.删除一个无头单链表的非尾节点(不能遍历链表)
{
SListNode *a=NULL;
SListNode *pos=NULL;
SListPushBack(&a,1);
SListPushBack(&a,2);
SListPushBack(&a,3);
SListPushBack(&a,4);
SListPushBack(&a,5);
SListPrint(a);
pos=SListFind(a,3);
SListDelNonTailNode(pos);
SListPrint(a);
}
void Test3()//3.在无头单链表的一个节点前插入一个节点(不能遍历链表)
{
SListNode *a=NULL;
SListNode *pos=NULL;
SListPushBack(&a,1);
SListPushBack(&a,2);
SListPushBack(&a,3);
SListPushBack(&a,4);
SListPushBack(&a,5);
SListPrint(a);
pos=SListFind(a,3);
SListInsertFrontNode(pos,8);
SListPrint(a);
}
void Test4()//4.单链表实现约瑟夫环(JosephCircle)
{
SListNode* list = NULL;
SListNode* tail;
SListPushBack(&list, 1);
SListPushBack(&list, 2);
SListPushBack(&list, 3);
SListPushBack(&list, 4);
SListPushBack(&list, 5);
tail = SListFind(list, 5);
tail->next = list;
printf("最后的幸存者:%d\n", SListJosephCircle(list, 3)->data);
}
void Test5()//5.//逆置/反转单链表
{
SListNode* list = NULL;
SListNode* newList;
SListPushBack(&list, 1);
SListPushBack(&list, 2);
SListPushBack(&list, 3);
SListPushBack(&list, 4);
SListPushBack(&list, 5);
newList = SListReverse(list);
SListPrint(newList);
}
void Test6()//6.单链表排序(冒泡排序&快速排序)
{
SListNode* list = NULL;
SListPushBack(&list, 1);
SListPushBack(&list, 22);
SListPushBack(&list, 33);
SListPushBack(&list, 40);
SListPushBack(&list, 5);
SListBubbleSort(list);
SListPrint(list);
}
void Test7()//7.合并两个有序链表,合并后依然有序
{
SListNode *a=NULL;
SListNode *b=NULL;
SListNode *c=NULL;
SListPushBack(&a,1);
SListPushBack(&a,2);
SListPushBack(&a,3);
SListPushBack(&a,4);
SListPushBack(&a,5);
SListPushBack(&a,7);
SListPushBack(&a,9);
SListPushBack(&b,2);
SListPushBack(&b,2);
SListPushBack(&b,3);
SListPushBack(&b,4);
SListPushBack(&b,5);
c=SListMerge(a,b);
SListPrint(c);
}
void Test8()//8.查找单链表的中间节点,要求只能遍历一次链表
{
SListNode *a=NULL;
SListNode *b=NULL;
SListPushBack(&a,1);
SListPushBack(&a,2);
SListPushBack(&a,3);
SListPushBack(&a,4);
SListPushBack(&a,5);
b=SListFindMidNode(a);
SListPrint(b);
}
void Test9()//9.查找单链表的倒数第k个节点,要求只能遍历一次链表
{
SListNode *a=NULL;
SListNode *b=NULL;
SListPushBack(&a,1);
SListPushBack(&a,2);
SListPushBack(&a,3);
SListPushBack(&a,4);
SListPushBack(&a,5);
b=SListFindTailKNode(a,2);
SListPrint(b);
}
void Test10()//10.删除链表的倒数第K个结点
{
SListNode *a=NULL;
SListNode *b=NULL;
SListPushBack(&a,1);
SListPushBack(&a,2);
SListPushBack(&a,3);
SListPushBack(&a,4);
SListPushBack(&a,5);
SListFindPop(a,3);
SListPrint(a);
}
void Test11_12_13()//11.判断是否带环 12.求环的长度 13。求环的入口点
{
SListNode *a=NULL;
SListNode *enter=NULL;
SListNode *tail=NULL;
SListNode *cur=NULL;
SListPushBack(&a,1 |