王道数据结构 (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");
}

 

 

带头节点 与不带头节点的实现 :

 

 

 

 

 

不带头节点:

 

 

 

 

带头节点:

 

 

 

比较:

 

posted @ 2020-07-22 10:00  1点  阅读(621)  评论(0编辑  收藏  举报