09 尾插入法创建单链表(实现2)

1,使用头指针的方式,不创建头结点

 1 /*尾插入实现方法2*/
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 
 5 //链表中节点的结构
 6 typedef struct Link {
 7     int  data;
 8     struct Link* next;
 9 }link;
10 
11 //链表初始化
12 link* initByTailInsert() {
13     link* phead = NULL;//创建头指针
14     link* first_node = (link*)malloc(sizeof(link));//创建第一个节点
15     //第一个结点先初始化
16     first_node->data = 1;
17     first_node->next = NULL;
18     phead = first_node;//头指针指向第一个节点
19 
20     //尾插入赋值
21     for (int i = 2; i < 5; i++) {
22         link* new_node = (link*)malloc(sizeof(link)); //申请新的结点
23         new_node->data = i;
24         new_node->next = NULL;
25         first_node->next = new_node;  //第一个结点的指针域指向这个新申请的结点
26         first_node = new_node;  //第一个结点后移
27     }
28 
29     printf("头指针指向的值是:%d
", phead->data);//1
30     return phead;  //将指向第一个结点的头指针返回
31 }
32 
33 
34 
35 void showLink(link* phead) {
36     link* tmp = phead;//将头指针赋给tmp,tmp也是一个头指针
37     //只要tmp指针指向的结点的next不是Null,就执行输出语句。
38     while (tmp!=NULL) {
39         printf("%d ", tmp->data);
40         tmp = tmp->next;
41     }
42     printf("
");
43 }
44 
45 void main() {
46     //初始化链表(1,2,3,4)
47     printf("初始化链表为:
");
48     link* phead = initByTailInsert(); //创建头指针,得到经过初始化后的头指针
49     showLink(phead);
50 }

使用创建头结点的方式:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 typedef struct Link {
 5     int data;
 6     struct Link* next;
 7 }link;
 8 
 9 
10 link* initLink(link* headNode) {
11     headNode = (link*)malloc(sizeof(link)); //头结点
12     headNode->next = NULL;
13     headNode->data = -1; //头结点的数据域给值是 -1
14 
15     link* headNode2 = headNode; //复制一个头结点
16 
17     for (int i = 1; i <= 10; i++) {
18         link* new_node = (link*)malloc(sizeof(link));
19         new_node->data = i;
20         new_node->next = NULL;
21         headNode2->next = new_node;
22         headNode2 = new_node;
23     }
24 
25     return headNode;
26 }
27 
28 
29 void showLink(link* headNode) {
30     link* temp = headNode;
31     while (temp != NULL) {
32         printf("%d  ", temp->data);
33         temp = temp->next;
34     }
35     printf("
");
36 }
37 
38 void main() {
39     link* head_node = NULL;
40     head_node = initLink(head_node); //获取经过初始化后的双向链表的头结点
41     printf("初始化单链表是:
");
42     showLink(head_node);
43 
44 }

原文地址:https://www.cnblogs.com/shanlu0000/p/12457695.html