C 单向链表(带头节点)
程序员文章站
2022-03-15 17:37:14
...
链表的头节点初始化
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Link;
Link *initLink()
{
Link *head = (Link *)malloc(sizeof(Link));
if(head != NULL)
{
head->data = 0;
head->next = NULL;
return head;
}
return NULL;
}
int main()
{
Link *head = initLink();
if(head == NULL)
{
exit(0);
}
return 0;
}
头插法插入新节点形成链表
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Link;
Link printfLink(Link *head)
{
Link *point = head->next;
while(point != NULL)
{
printf("%d\t", point->data);
point = point->next;
}
putchar('\n');
}
Link *initLink()
{
Link *head = (Link *)malloc(sizeof(Link));
if(head != NULL)
{
head->data = 0;
head->next = NULL;
return head;
}
return NULL;
}
Link *headInsert(Link *head, int num)
{
Link *new = (Link *)malloc(sizeof(Link));
if(new != NULL)
{
new->data = num;
new->next = head->next;
head->next = new;
head->data ++;
return head;
}
return NULL;
}
int main()
{
int i;
Link *head = initLink();
if(head == NULL)
{
exit(0);
}
for(i=1;i<6;i++)
{
head = headInsert(head, i);
}
printfLink(head);
printf("hava %d nodes\n", head->data);
return 0;
}
尾插法插入新节点形成链表
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Link;
Link printfLink(Link *head)
{
Link *point = head->next;
while(point != NULL)
{
printf("%d\t", point->data);
point = point->next;
}
putchar('\n');
}
Link *initLink()
{
Link *head = (Link *)malloc(sizeof(Link));
if(head != NULL)
{
head->data = 0;
head->next = NULL;
return head;
}
return NULL;
}
Link *tailInsert(Link *head, int num)
{
Link *point = head;
Link *new = (Link *)malloc(sizeof(Link));
if(new != NULL)
{
new->data = num;
while(point->next != NULL)
{
point = point->next;
}
point->next = new;
head->data ++;
return head;
}
return NULL;
}
int main()
{
int i;
Link *head = initLink();
if(head == NULL)
{
exit(0);
}
for(i=1;i<6;i++)
{
head = tailInsert(head, i);
}
printfLink(head);
printf("hava %d nodes\n", head->data);
return 0;
}
指定节点之前插入新节点
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Link;
Link *addNodeToLink(Link *head, Link *newNode, int pos);
Link printfLink(Link *head)
{
Link *point = head->next;
while(point != NULL)
{
printf("%d\t", point->data);
point = point->next;
}
putchar('\n');
}
Link *initLink()
{
Link *head = (Link *)malloc(sizeof(Link));
if(head != NULL)
{
head->data = 0;
head->next = NULL;
return head;
}
return NULL;
}
Link *tailInsert(Link *head, int num)
{
Link *point = head;
Link *new = (Link *)malloc(sizeof(Link));
if(new != NULL)
{
new->data = num;
while(point->next != NULL)
{
point = point->next;
}
point->next = new;
head->data ++;
return head;
}
return NULL;
}
int main()
{
int i;
int pos;
Link *head = initLink();
Link newNode = {
.data = 100,
.next = NULL
};
if(head == NULL)
{
exit(0);
}
for(i=1;i<6;i++)
{
head = tailInsert(head, i);
}
printfLink(head);
printf("hava %d nodes\n", head->data);
printf("add node before:");
scanf("%d", &pos);
head = addNodeToLink(head, &newNode, pos);
printfLink(head);
return 0;
}
Link *addNodeToLink(Link *head, Link *newNode, int pos)
{
Link *point = head->next;
Link *tmp = head;
while(point != NULL)
{
if(point->data == pos)
{
newNode->next = point;
tmp->next = newNode;
return head;
}
tmp = point;
point = point->next;
}
printf("haven't find data\n");
return head;
}
指定节点之后插入新节点
改动部分
Link *addNodeToLink(Link *head, Link *newNode, int pos)
{
Link *point = head->next;
while(point != NULL)
{
if(point->data == pos)
{
newNode->next = point->next;;
point->next = newNode;
return head;
}
point = point->next;
}
printf("haven't find data\n");
return head;
}
删除指定数据域的节点
改动部分
Link *delNode(Link *head, int pos)
{
Link *point = head->next;
Link *tmp = head;
while(point != NULL)
{
if(point->data == pos)
{
tmp->next = point->next;
free(point);
return head;
}
tmp = point;
point = point->next;
}
printf("haven't find data\n");
return head;
}
删除整条链表
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data;
struct Node *next;
}Link;
Link *delLink(Link *head);
Link printfLink(Link *head)
{
Link *point = head->next;
while(point != NULL)
{
printf("%d\t", point->data);
point = point->next;
}
putchar('\n');
}
Link *initLink()
{
Link *head = (Link *)malloc(sizeof(Link));
if(head != NULL)
{
head->data = 0;
head->next = NULL;
return head;
}
return NULL;
}
Link *tailInsert(Link *head, int num)
{
Link *point = head;
Link *new = (Link *)malloc(sizeof(Link));
if(new != NULL)
{
new->data = num;
while(point->next != NULL)
{
point = point->next;
}
point->next = new;
head->data ++;
return head;
}
return NULL;
}
int main()
{
int i;
int pos;
Link *head = initLink();
if(head == NULL)
{
exit(0);
}
for(i=1;i<6;i++)
{
head = tailInsert(head, i);
}
printfLink(head);
printf("hava %d nodes\n", head->data);
head = delLink(head);
if(head == NULL)
{
printf("done\n");
}
return 0;
}
Link *delLink(Link *head)
{
Link *tmp = NULL;
while(head != NULL)
{
tmp = head;
head = head->next;
free(tmp);
head = head->next;
}
return head;
}
下一篇: 重庆推进区块链财政电子票据试点