王道数据结构 (1) 单链表 头插法
第一步: 原来L 的 next 域 是a1 ,将 L 的 next 域 赋值给 了 s的 next 域 实现了 s与 a1 的相连
s->next = L->next; // 将L的next 域指向了 新创建节点的data 域
第二步: 将L的next 域赋值给 s 实现了 L与 s 的相连 这样 s的左边连接 与 右边连接都实现了
L->next = s; // 将L的next 指向为 s
代码:
/*单链表(含头结点)*/ #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct LNode{ ElemType data; //数据域 struct LNode *next; // 指针域 }LNode,*LinkList; LinkList CreateHeadList(ElemType a[], int n); //头插法建立单链表 void OutputList(LinkList L); void main(){ LinkList L = NULL; ElemType a[] = { 1, 2, 3, 4, 5 }; ElemType e; L = CreateList1(a, 5); OutputList(L); } LinkList CreateHeadList(ElemType a[], int n){ //头插法建立单链表 int i; LinkList L = NULL, s = NULL; L = (LNode*)malloc(sizeof(LNode)); L->next = NULL; for (i = 0; i < n; i++){ s = (LNode*)malloc(sizeof(LNode)); // 创建新节点 s->data = a[i]; s->next = L->next; // 将L的next 域指向了 新创建节点的data 域 L->next = s; // 将L的next 指向为 s } return L; } // 输出所有链表的思路: // 1.让头节点的next 指向下一个节点 // 2. 做一个循环 当超出时打断循环 循环内的时候 p 指向下一个 p 是 现在的节点 p=p-> next 节点会向下一个移动 void OutputList(LinkList L){ //输出单链表全部元素 LinkList p = L->next; while (p){ printf("%d ", p->data); p = p->next; } printf("\n"); }
带头节点 与不带头节点的实现 :
不带头节点:
带头节点:
比较:
越努力越幸运