链表常见的面试题

逆序打印单链表. 
void LinkListReversePrint(LinkNode* head); 



不允许遍历链表, 在 pos之前插入 
void LinkListInsertBefore(LinkNode** head, LinkNode* pos, LinkType value); 


LinkNode* JosephCycle(LinkNode* head, size_t food); 


单链表逆置 
void LinkListReverse(LinkNode** head); 
void LinkListReverse2(LinkNode** head); 


单链表的冒泡排序 
void LinkListBubbleSort(LinkNode* head); 


 将两个有序链表, 合并成一个有序链表 
LinkNode* LinkListMerge(LinkNode* head1, LinkNode* head2); 


LinkNode* FindMidNode(LinkNode* head); 

找到倒数第 K 个节点. 
LinkNode* FindLastKNode(LinkNode* head, size_t K); 

删除倒数第K个节点 
void EraseLastKNode(LinkNode** head, size_t K); 


判定单链表是否带环. 如果带环返回1 
LinkNode* HasCycle(LinkNode* head); 


如果链表带环, 求出环的长度 

size_t GetCycleLen(LinkNode* head); 

如果链表带环, 求出环的入口 
LinkNode* GetCycleEntry(LinkNode* head); 


判定两个链表是否相交, 并求出交点 

LinkNode* HasCross(LinkNode* head1, LinkNode* head2);

以下是头文件,承接上一个博客的功能

#pragma once
typedef char LinkNodeType;
typedef struct LinkNode{
	LinkNodeType data;
	struct LinkNode *next;
}LinkNode;

typedef struct LinkList{
	LinkNode *head;
	LinkNode *tail;
}LinkList;

typedef LinkNode *PLinkNode;

void PrintChar(LinkNode *head,const char *msg);

LinkNode* CreateNode(LinkNodeType value);

void LinkListInit(LinkNode** head);

void LinkListPushBack(LinkNode** head,LinkNodeType value);

void LinkListPopBack(LinkNode **head);

void DestoryNode(LinkNode *node);

void LinkListPushFront(LinkNode **head,LinkNodeType value);

void LinkListPopFront(LinkNode **head);

LinkNode* LinkListFind(LinkNode *head,LinkNodeType to_find);

void LinkListInsertBefore(LinkNode** head,LinkNode *pos,LinkNodeType value);

void LinkListErase(LinkNode **head,LinkNode *pos);

void LinkListErase2(LinkNode **head,LinkNode *pos);

void LinkListRemove(LinkNode **head,LinkNodeType to_delete);

void LinkListRemoveAll(LinkNode **head,LinkNodeType value);

int LinkListEmpty(LinkNode *head);

size_t LinkListSize(LinkNode *head);

void LinkListReversePrint(LinkNode *head);

void LinkListInsertBefore2(LinkNode **head,LinkNode *pos,LinkNodeType value);

LinkNode* JosephCycle(LinkNode *head,size_t food);

void LinkListReverse(LinkNode **head);

void LinkListReverse2(LinkNode **head);

void LinkListBubbleSort(LinkNode* head);

LinkNode* LinkListMerge(LinkNode *head1,LinkNode *head2); 

LinkNode* FindMidNode(LinkNode *head);

LinkNode*  FindLastKNode(LinkNode *head,size_t k);

void EraseLastKNode(LinkNode **head,size_t k);

int HasCycle(LinkNode* head);

size_t GetCycleLen(LinkNode *head);

LinkNode* MeetNode(LinkNode *head);

LinkNode* GetCycleEntry(LinkNode *head);

size_t HasCross(LinkNode *head1,LinkNode *head2);

再往下是功能实现:

#include<stdio.h>
#include"LinkList.h"
#include<stdlib.h>
#define TestHeader printf("\n=========%s========\n",__FUNCTION__)
void LinkListInit(LinkNode** head){
	*head = NULL;
}

void PrintChar(LinkNode *head,const char *msg){
	printf("[%s]\n",msg);
	LinkNode *cur = head;//TODO
	for(;cur !=NULL;cur=cur->next)
	{
		printf("[%c]|%p  ",cur->data,cur);
	}		
	printf("\n");
}

LinkNode* CreateNode(LinkNodeType value)
{
	LinkNode *new_node=(LinkNode*)malloc(sizeof(LinkNode));
	new_node->data=value;
	new_node->next=NULL;
}

void DestoryNode(LinkNode *node){
	free(node);
}

void LinkListPushBack(LinkNode **head,LinkNodeType value){
	if(head==NULL){
		return;
	}
	if(*head == NULL){
		*head=CreateNode(value);
		return;
	}
	LinkNode *cur=*head;
	while(cur->next != NULL){
		cur = cur->next;
	}
	LinkNode *new_node = CreateNode(value);
	cur->next=new_node;
}

void LinkListPopBack(LinkNode **head){
	if(head==NULL){
		return;
	}
	if(*head==NULL){
		return;
	}
	if((*head)->next == NULL){
		DestoryNode(*head);
		return;
	}
	LinkNode *cur=*head;
	LinkNode *pre=NULL;
	while(cur->next != NULL){
		pre=cur;
		cur=cur->next;
	}
	pre->next=NULL;
	DestoryNode(cur);
	return;
}

void LinkListPushFront(LinkNode **head,LinkNodeType value){
	if(head==NULL){
		return;
	}
	if(*head==NULL){//emptylist
		LinkListPushBack(head,value);
	}
	LinkNode *new_node=CreateNode(value);
	new_node->next=*head;
	*head=new_node;
	}

void LinkListPopFront(LinkNode **head){
	if(head==NULL){
		return;
	}
	if(*head==NULL){
		return;
	}
	LinkNode *to_delete=*head;
	*head=(*head)->next;
	DestoryNode(to_delete);
	}

LinkNode* LinkListFind(LinkNode *head,LinkNodeType to_find){
	if(head==NULL){
		return NULL;
	}
	LinkNode *cur=head;
	while(cur->next != NULL){
		if(cur->data == to_find){
			break;
			return NULL;
		}
		cur=cur->next;
	}
	return cur;
}

void LinkListInsertAfter(LinkNode **head,LinkNode *pos,LinkNodeType value){
	if(*head==NULL){
		return;
	}	
	if(pos==NULL){
		return;//inlegal input
	}
	LinkNode *new_node=CreateNode(value);
	new_node->next=pos->next;
	pos->next=new_node;
}

void LinkListInsertBefore(LinkNode **head,LinkNode *pos,LinkNodeType value){
	if(*head == NULL){
		return;
	}
	if(pos == NULL){
		return;
	}
	if(*head == pos){
		LinkListPushFront(head,value);
		return;
	}
	LinkNode *cur=*head;
	for(;cur->next != NULL;cur = cur->next){
		if(cur == pos){
			break;
		}
		if(cur == NULL){
			return;
		}//pos not in list
	}
	LinkListInsertAfter(head,cur,value);
	return;
}

void LinkListErase(LinkNode **head,LinkNode *pos){
	if(*head == NULL || pos==NULL){
		return;
	}
	if(head == NULL){
		return;
	}
	LinkNode *cur = *head;
	LinkNode *pre =NULL;
	LinkNode *to_erase = NULL;
	for(;cur!= NULL;pre = cur,cur= cur->next){
		if(cur == pos){
			break;
		}
		if(cur == NULL){
			return;
		}
	}
	to_erase=cur;
	pre->next=to_erase->next;;
	DestoryNode(to_erase);
	return;
}

void LinkListErase2(LinkNode **head,LinkNode *pos){
	if(pos==NULL || head==NULL){
		return;
	}
	if(*head== NULL){
		return;
	}
	if(pos->next == NULL){
		LinkListErase(head,pos);
		return;
	}
	pos->data=pos->next->data;
	LinkNode *to_erase = pos->next;
	pos->next=to_erase->next;
	DestoryNode(to_erase);
	return;
}

void LinkListRemove(LinkNode **head,LinkNodeType to_delete){
	if(head==NULL){
		return;
	}
	if(*head == NULL){
		return;
	}
	if((*head)->data == to_delete){
		LinkNode *to_delete = *head;
		(*head)=(*head)->next;
		DestoryNode(to_delete);
		return;
	}
	LinkNode *cur = *head;
	for(;cur->next!=NULL;cur=cur->next){
		if(cur->data == to_delete){
			LinkNode *to_delete=cur;
			cur->next=to_delete->next;
			DestoryNode(to_delete);
			return;
		}
	}
	return;
}

void LinkListRemoveAll(LinkNode **head,LinkNodeType value){
	if(head == NULL){
		return;
	}
	if(*head == NULL){
		return;
	}
	LinkNode *cur = *head;
	for(;cur->next!=NULL;cur=cur->next){
		if(cur->data == value){
			LinkListRemove(head,value);
		}
	}
	return;
}

int LinkListEmpty(LinkNode *head){
	return head==NULL?1:0;	
}

size_t LinkListSize(LinkNode *head){
	if(head == NULL){
		return 0;
	}
	size_t count=1;
	LinkNode *cur=head;
	for(;cur->next != NULL;cur= cur->next){
		count++;
	}
	return count;
}

void LinkListReversePrint(LinkNode *head){
	if(head == NULL){
		return;
	}
	LinkListReversePrint(head->next);
	printf("[%c]%p",head->data,head);
}

void LinkListInsertBefore2(LinkNode **head,LinkNode *pos,LinkNodeType value){
	if(*head == NULL || pos == NULL){
		return;
	}
	LinkNode *new_node=CreateNode(pos->data);
	LinkNode *after_new_node=pos->next;
	pos->next=new_node;
	new_node->next=after_new_node;
	pos->data=value;
	return;
}

LinkNode* JosephCycle(LinkNode *head,size_t food){
	if(head == NULL){
		return;
	}
	if(head->next == head ){
		return;
	}
	LinkNode *cur =head;
	while(cur->next != cur){
		int i=1;
		for(;i<food;++i){
			cur=cur->next;	
		}
		printf("%c\n",cur->data);
		cur->data=cur->next->data;
		LinkNode *to_delete=cur->next;
		cur->next=to_delete->next;
		DestoryNode(to_delete);
	}
	return cur;
}

void LinkListReverse(LinkNode **head){
	if(*head == NULL){
		return;
	}
	if(head == NULL){
		return;
	}
	if((*head)->next == NULL){
		return;
	}
	LinkNode *pre=*head;
	LinkNode *cur=pre->next;
	pre->next=NULL;
	while(cur !=  NULL){
		LinkNode *next =cur->next;
		cur->next=pre;
		pre=cur;
		cur=next;
	}
	*head=pre;
	return;
}

void LinkListReverse2(LinkNode **head){
	if(*head == NULL){
		return;
	}
	if(head == NULL){
		return;
	}
	if((*head)->next == NULL){
		return;
	}
	LinkNode *cur=*head;
	while(cur->next!=NULL){
		LinkNode *to_move=cur->next;
		cur->next=to_move->next;
		to_move->next=*head;
		*head=to_move;
	}
	return;
}

void LinkListBubbleSort(LinkNode *head){
	if (head == NULL){
		return;
	}
	if(head->next == NULL){
		return;
	}
	LinkNode *count=head;
	LinkNode *tail=NULL;
	for(;count!=NULL;count=count->next){
		LinkNode *cur=head;
		for(;cur->next !=tail;cur=cur->next){
			if((cur->data) > (cur->next->data)){
			int tmp=cur->next->data;
				cur->next->data=cur->data;
				cur->data=tmp;
			}
		}
	tail=cur;
	}
	return;
}

LinkNode* LinkListMerge(LinkNode *head1,LinkNode *head2){
	if(head1 == NULL){return head2;}
	if(head2 == NULL){return head1;}
	LinkNode *cur1=head1;
	LinkNode *cur2=head2;
	LinkNode *new_head=NULL;
	LinkNode *new_tail=NULL;
	while(cur1!=NULL && cur2!=NULL){
		if(cur1->data < cur2->data){
			if(new_tail==NULL){
				new_head=cur1;
				new_tail=cur1;
				cur1=cur1->next;
			}
			else{
				new_tail->next=cur1;
				new_tail=new_tail->next;
				cur1=cur1->next;
			}
		}
		else{
			if(new_tail==NULL){
				new_head=cur2;
				new_tail=cur2;
				cur2=cur2->next;
			}
			else{
				new_tail->next=cur2;
				new_tail=new_tail->next;
				cur2=cur2->next;
			}
		}
	}
	if(cur1 !=NULL){
		new_tail->next=cur1;
	}
	else{
		new_tail->next=cur2;
	}
	return new_head;
}

LinkNode* FindMidNode(LinkNode *head){
	if(head == NULL){
		return;
	}
	LinkNode *slow=head;
	LinkNode *fast=head;
	while(fast != NULL && fast->next !=NULL){
		slow=slow->next;
		fast=fast->next->next;
	}
	return slow;
}

LinkNode* FindLastKNode(LinkNode *head,size_t k){
	if(head == NULL){
		return;
	}
	LinkNode *fast=head;
	LinkNode *slow=head;
	int i=0;
	for(;i<k;++i){
		if(fast==NULL){
			break;
		}
		fast=fast->next;
	}
	if(i!=k){
		return NULL;
	}
	while(fast!=NULL){
		fast=fast->next;
		slow=slow->next;
	}
	return slow;
}

void EraseLastKNode(LinkNode **head,size_t k){
	if(*head == NULL){
		return;
	}
	if(head==NULL){
		return;
	}
	size_t len=LinkListSize(*head);
	if(k==len){
		LinkListPopFront(head);
		return;
	}
	LinkNode *pre=*head;
	int i=0;
	for(;i<len-1-k;++i){
		pre=pre->next;
	}
	LinkNode *to_delete=pre->next;
	pre->next=to_delete->next;
	DestoryNode(to_delete);
	return;
}

int HasCycle(LinkNode* head){
	if(head == NULL){
		return;
	}
	LinkNode *slow=head;
	LinkNode *fast=head;
	while(fast!= NULL && fast->next != NULL){
		fast=fast->next->next;
		slow=slow->next;
	if(slow == fast ){
		return 1;
		}
	}
	return 0;
}

LinkNode *MeetNode(LinkNode* head){
	if(head == NULL){
		return;
	}
	LinkNode *slow=head;
	LinkNode *fast=head;
	while(fast!= NULL && fast->next != NULL){
		fast=fast->next->next;
		slow=slow->next;
	if(slow == fast ){
		return slow;
		}
	}
	return NULL;
}

size_t GetCycleLen(LinkNode *head){
	if(head == NULL){
		return 0;
	}
	LinkNode *meet_node=MeetNode(head);
	if(meet_node == NULL){
		return 0;
	}
	size_t count=0;
	LinkNode *cur=meet_node->next;
	while(cur!=meet_node){
		cur=cur->next;
		count++;
	}
	return count;
}

void TestGetCycleLen(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'1');
	LinkListPushBack(&head,'2');
	LinkListPushBack(&head,'3');
	LinkListPushBack(&head,'4');
	LinkListPushBack(&head,'5');
	LinkNode *pos_end=LinkListFind(head,'5');
	pos_end->next=head->next->next;
	int ret=GetCycleLen(head);
	printf("the len is %d\n",ret);
}

LinkNode* GetCycleEntry(LinkNode *head){
	if(head==NULL){
		return NULL;
	}
	int judge;
	judge=HasCycle(head);
	if(judge != 1){
		return NULL;
	}
	LinkNode *meet_node=MeetNode(head);
	LinkNode *fast=meet_node;
	LinkNode *slow=head;
	while(slow != fast){
		slow=slow->next;
		fast=fast->next;
	}
	return slow;
}

void TestGetCycleEntry(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'1');
	LinkListPushBack(&head,'2');
	LinkListPushBack(&head,'3');
	LinkListPushBack(&head,'4');
	LinkListPushBack(&head,'5');
	LinkNode *pos_end=LinkListFind(head,'5');
	pos_end->next=head->next->next;
	LinkNode *entry=GetCycleEntry(head);
	printf("[%c]|%p",entry->data,entry);
}

LinkNode* HasCross(LinkNode *head1,LinkNode *head2){
	if(head1 == NULL || head2 ==NULL){
		return 0;
	}
	LinkNode *cur1=head1;
	LinkNode *cur2=head2;
	while(1){
		if(cur1->data == cur2->data){
			break;
		}
		cur1=cur1->next;
		cur2=cur2->next;
		if(cur1== NULL || cur2== NULL ){
			return NULL;
		}
	}
	return cur1;
}

void TestHasCross(){
	
	TestHeader;
	LinkNode *head1;
	LinkListInit(&head1);
	LinkListPushBack(&head1,'1');
	LinkListPushBack(&head1,'2');
	LinkListPushBack(&head1,'3');
	LinkListPushBack(&head1,'7');
	LinkListPushBack(&head1,'8');
	
	LinkNode *head2;
	LinkListInit(&head2);
	LinkListPushBack(&head2,'4');
	LinkListPushBack(&head2,'5');
	LinkListPushBack(&head2,'6');
	LinkListPushBack(&head2,'7');
	LinkListPushBack(&head2,'8');

	LinkNode *cross=HasCross(head1,head2);
	printf("[%c]|%p\n",cross->data,cross);
}

void TestHasCycle(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'1');
	LinkListPushBack(&head,'2');
	LinkListPushBack(&head,'3');
	LinkListPushBack(&head,'4');
	LinkListPushBack(&head,'5');
	LinkNode *pos_end=LinkListFind(head,'5');
	pos_end->next=head;
	int i=HasCycle(head);
	printf("%d\n",i);
}

void TestEraseLastKNode(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'1');
	LinkListPushBack(&head,'2');
	LinkListPushBack(&head,'3');
	LinkListPushBack(&head,'4');
	LinkListPushBack(&head,'5');
	EraseLastKNode(&head,2);
	PrintChar(head,"\n");
}

void TestLastKNode(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'1');
	LinkListPushBack(&head,'2');
	LinkListPushBack(&head,'3');
	LinkListPushBack(&head,'4');
	LinkListPushBack(&head,'5');
	LinkNode *LastKNode=FindLastKNode(head,1);
	printf("[%c]|%p\n",LastKNode->data,LastKNode);
}

void TestMidNode(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'1');
	LinkListPushBack(&head,'3');
	LinkListPushBack(&head,'5');
	LinkListPushBack(&head,'7');
	LinkNode *mid_node=FindMidNode(head);
	printf("[%c]|%p",mid_node->data,mid_node);
}

void TestMerge(){
	TestHeader;
	LinkNode *head1;
	LinkListInit(&head1);
	LinkListPushBack(&head1,'1');
	LinkListPushBack(&head1,'3');
	LinkListPushBack(&head1,'5');
	LinkListPushBack(&head1,'7');
	
	LinkNode *head2;
	LinkListInit(&head2);
	LinkListPushBack(&head2,'2');
	LinkListPushBack(&head2,'4');
	LinkListPushBack(&head2,'6');
	LinkListPushBack(&head2,'8');
	
	LinkNode *new_list=LinkListMerge(head1,head2);
	PrintChar(new_list,"\n");
}

void TestBubbleSort(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'1');
	LinkListPushBack(&head,'2');
	LinkListPushBack(&head,'4');
	LinkListPushBack(&head,'3');
	LinkListBubbleSort(head);
	PrintChar(head,"\n");	
}

void TestReverse2(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkListReverse2(&head);
	PrintChar(head,"\n");
}

void TestReverse(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkListReverse(&head);
	PrintChar(head,"\n");
}

void TestJosephCycle(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);	
	LinkNode *a=CreateNode('a');
	LinkNode *b=CreateNode('b');
	LinkNode *c=CreateNode('c');
	LinkNode *d=CreateNode('d');
	head=a;
	a->next=b;
	b->next=c;
	c->next=d;
	d->next=a;
	LinkNode *ret=JosephCycle(head,2);
	printf("%p",ret);
}

void TestInsertBefore2(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkNode *pos=head->next->next->next;
	LinkListInsertBefore2(&head,pos,'x');
	PrintChar(head,"\n");
}

void TestReversePrint(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkListReversePrint(head);
	printf("\n");
}

void TestSize(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'d');
	int len=LinkListSize(head);
	printf("the size is %d\n",len);
}

void TestEmpty(){	
	TestHeader;
	LinkNode *head;
	int ret=LinkListEmpty(head);
	printf("result is :%d\n",ret);
}

void TestRemoveAll(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'d');
	LinkListRemoveAll(&head,'a');
	PrintChar(head,"\n");
}

void TestRemove(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkListRemove(&head,'b');
	PrintChar(head,"\n");
}

void TestErase2(){
	
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkNode *pos = head->next->next;
	LinkListErase2(&head,pos);
	PrintChar(head,"\n");
}

void TestErase(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkNode *pos = head->next->next;
	LinkListErase(&head,pos);
	PrintChar(head,"\n");
}

void TestInsertBefore(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkNode *pos=head->next;
	LinkListInsertBefore(&head,pos,'H');
	PrintChar(head,"\n");
}

void TestInsertAfter(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkNode *pos=head->next;
	LinkListInsertAfter(&head,pos,'o');
	PrintChar(head,"\n");
}

void TestFind(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);	
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkNode *dest=LinkListFind(head,'c');
	PrintChar(head,"\n");
	printf("the address of c is[%p]\n",dest);
	
	
}

void TestPopFront(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkListPopFront(&head);
	LinkListPopFront(&head);
	PrintChar(head,"\n");
}

void TestPushFront(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkListPushFront(&head,'x');
	LinkListPushFront(&head,'y');
	PrintChar(head,"\n");
}

void TestPopBack(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	LinkListPopBack(&head);
	LinkListPopBack(&head);
	PrintChar(head,"\n");
}

void TestPushBack(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
	LinkListPushBack(&head,'a');
	LinkListPushBack(&head,'b');
	LinkListPushBack(&head,'c');
	LinkListPushBack(&head,'d');
	PrintChar(head,"\n");
}

void TestInit(){
	TestHeader;
	LinkNode *head;
	LinkListInit(&head);
}

void main(){
	TestInit();
	TestPushBack();
	TestPopBack();
	TestPushFront();
	TestPopFront();
	TestFind();
	TestInsertAfter();
	TestErase();
	TestErase2();
	TestRemove();
	TestRemoveAll();
	TestEmpty();
	TestSize();
	TestReversePrint();
	TestInsertBefore2();
	TestJosephCycle();
	TestReverse();
	TestReverse2();
	TestBubbleSort();
	TestMerge();
	TestMidNode();
	TestLastKNode();
	TestEraseLastKNode();
	TestHasCycle();
	TestGetCycleLen();
	TestGetCycleEntry();
	TestHasCross();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值