/*
* function: 直接插入排序
* @param [ in]
* @param [out]
* @return
*/
void insert_sort_linklist(linklist* head,datatype data){
linklist* p=head;
while(NULL!=p->pnext && p->pnext->param < data){
p=p->pnext;
}
linklist* temp=create_linklist(data);
temp->pnext = p->pnext;
p->pnext = temp;
head->param++;
}
/*
* function: 倒序链表
* @param [ in]
* @param [out]
* @return
*/
void linklist_desc(linklist* head){
linklist* p=head->pnext;
linklist* q=NULL;
while(next!=NULL){
q=p->pnext;
p->pnext=head->pnext;
head->pnext=p;
p=pnext;
}
}
/*
* function: 快慢指针
* @param [ in]
* @param [out]
* @return
*/
void fast_slow_point(linklist* head){
if(head==NULL||head->pnext==NULL){
return;
}
linklist* fast,slow;
fast=slow=head->pnext;
while(fast!=NULL||fast->pnext!=NULL){
fast=fast->pnext->pnext;
slow=slow->pnext;
}
printf("中间值:%d\n",(int)slow->param);
}
#include "./t2_impl.h"
//创建单向循环链表 头结点
lk* create_head_loop_linklist(datatype data){
lk* head=create_node_loop_linklist();
head->data=data;
head->next=head;
return head;
}
//创建节点
lk* create_node_loop_linklist(){
lk* node=(lk*)malloc(sizeof(lk));
if(NULL==node){
puts("节点创建失败");
}
return node;
}
//头插
void insert_head_loop_linklist(lk* head,datatype data){
lk* node=create_node_loop_linklist();
node->next=head->next;
head->next=node;
node->data=data;
head->data++;
puts("头插成功");
}
//尾插
void insert_last_loop_linklist(lk* head,datatype data){
lk* node=create_node_loop_linklist();
lk* temp=head;
while(temp->next!=head){
temp=temp->next;
}
node->next=temp->next;
node->data=data;
temp->next=node;
head->data++;
puts("尾插成功");
}
//遍历
void print_linklist(lk* head){
lk* temp=head;
puts("---------遍历----------");
while(temp->next!=head){
temp=temp->next;
printf("%d \n",temp->data);
}
puts("-----------------------");
}
//头删
void delete_head_loop_linklist(lk* head){
lk* temp=head->next->next;
free(head->next);
head->next=temp;
head->data--;
puts("头删完成");
}
//尾删
void delete_last_loop_linklist(lk* head){
lk* temp=head->next;
while(temp->next->next != head){
temp=temp->next;
}
free(temp->next);
temp->next=head;
head->data--;
puts("尾删完成");
}
部分代码及其结果
乔瑟夫问题:
node* joseph_createNode_linklist(int n){
node* head=NULL;
node* temp=NULL;
for(int i=1; i<=n; i++){
node* newNode = (node*)malloc(sizeof(node));
newNode->data = i;
newNode->next = NULL;
if(head == NULL){
head = newNode;
temp = head;
} else {
temp->next = newNode;
temp = newNode;
}
}
temp->next = head;
return head;
}
void printList(node* head) {
node* temp = head;
do {
printf("%d ", temp->data);
temp = temp->next;
} while (temp != head);
printf("\n");
}
void joseph_linklist(node* head, int n, int k, int m){
node* current = head;
node* prev = NULL;
int count = 0;
for(int i=0; i<k-1; i++) {
current = current->next;
}
while(current->next != current) {
count++;
if(count == m) {
printf("Out: %d\n", current->data);
prev->next = current->next;
count = 0;
current = prev->next;
} else {
prev = current;
current = current->next;
}
}
printf("Last: %d\n", current->data);
}