单链表demo:
#include <stdio.h>
#include <stdlib.h>
typedef struct slist_note
{
char data;
struct slist_note *next;
}slist;
slist *creat_note(char data)
{
slist *slist_n = calloc(1, sizeof(slist));
slist_n->data = data;
slist_n->next = NULL;
return slist_n;
}
void slist_insert_head(slist *head, slist *n)
{
#if 1
n->next = head->next;
head->next = n;
#elif
slist *temp = NULL;
temp = head;
n->next = temp->next;
temp->next = n;
#endif
}
void slist_insert_tail(slist *head, slist *n)
{
#if 0
while(head->next)
{
head = head->next;
}
head->next = n;
n->next = NULL;
#else
slist *temp = NULL;
temp = head;
while(temp->next)
{
temp = temp->next;
}
temp->next = n;
n->next = NULL;
#endif
}
void print_note(slist *head)
{
#if 0
while(head->next)
{
printf("data:%d\n", head->data);
head = head->next;
}
printf("data:%d\n", head->data);
#else
slist *temp = NULL;
temp = head;
while(temp->next)
{
printf("data:%d\n", temp->data);
temp = temp->next;
}
printf("data:%d\n", temp->data);
#endif
}
void slist_delet_data(slist *head, char data)
{
slist *temp = NULL;
slist *p = NULL;
temp = head;
while(temp->data != data)
{
p = temp; //指向当前节点
temp = temp->next;
if(!temp->next)
{
printf("data no find\n");
return;
}
}
printf("data:%d\n", temp->data);
p->next = temp->next;
free(temp);
}
//反转
void slist_turn(slist *head)
{
slist *temp = NULL;
slist *p = NULL;
temp = head->next;
if(!temp->next || !temp)
{
return;
}
while(temp->next)
{
p = temp->next; //下个节点的下个节点
if(temp == head->next)
{
temp->next = NULL;
}
else
{
temp->next = head->next;
}
head->next = temp;
temp = p; //走下个节点
}
slist_insert_head(head, temp);
}
int main()
{
slist *head_0 = creat_note(0);
for(int i = 1; i < 5; i++)
{
slist_insert_tail(head_0, creat_note(i));
}
print_note(head_0);
slist_delet_data(head_0,5);
print_note(head_0);
slist_turn(head_0);
print_note(head_0);
/* 我的第一个 C 程序 */
printf("Hello, World! \n");
return 0;
}