二、单链表的头插与尾插

只要懂了单链表的头插与尾插,双链表的就非常好理解了。对于这,我觉得用图形解释没一步是最好的方法。附上我自己对头插与
尾插的理解。
 
1.头插法在我学的过程中最难以理解的是s->next=L->next。解决方法:我是通过上面这幅图了解头插是如何一步一步插入元素,按步骤分析即可。
A:创建一个指针域为NULL,数据域为空的头节点L;
B:假设插入的节点为S,将头节点后面一个节点的地址(L->next)赋值给新节点S的指针域(S->next),在这一步中因为头结点后面没有节点了,即L->next=NULL,所以会得到s->next=NULL。然后再将s的地址赋给头节点即可;
C:在B的基础上,你会看到头结点后面有了一个节点,即L->next非空了,将1的地址给2,2的地址给头结点就完了;
D:同C。

A:创建一个头结点,并且定义一个尾指针,指向头结点(因为此时只有一个节点,头结点也是尾节点,所以尾指针指向头结点);(*********只需要记得L与r是共同体,修改r就等于修改L,这有助于理解第二步***********)
B:将新插入的节点s1的节点赋值给r->next,很可能要问,为什么不赋值给L->next?原因,尾插法,尾节点是一个动态的,他时刻处于变化之中,头结点L仅在开始时表示尾节点,其他时候不表示尾节点,所以要赋值给r->next;之后再将尾指针指向新插入的为节点就好了。
C:接下来就蛮好理解了,同上,我多画了几步,只是为了验证;
D:同上。

注意:需要注意的是像这种s->next有时他表示地址,有时他表示的是整个节点,注意下区分就可。
                                                                                                                                                                by   张辉
                                                                                                                                                                                2014年10月22日

时间: 2024-11-05 04:02:17

二、单链表的头插与尾插的相关文章

单链表的头插法和尾插法c语言实现

/*单链表的头插法和尾插法c语言实现*/ #include <stdio.h>#include <stdlib.h>#include <string.h>#define SIZE 100/*简单的定义一个链表节点的数据单元*/typedef struct student_t{ int num; char name[SIZE]; struct student_t* pNext;}studentList, *pStudentList; /*定义一个全局的静态的链表头节点指针

单链表的头插、尾插、删除、合并等操作

单链表的头插.尾插.删除.合并等操作实现代码如下: #include<iostream> using namespace std; //单链表的存储结构 typedef struct Node { int data; struct Node* next; }Node,*LinkList;//LinkList为结构指针类型 //初始化单链表 void InitList(LinkList *L) { *L = (LinkList)malloc(sizeof(Node));//建立头结点 (*L)-

单链表:头插法和尾插法

头插法: linklist *CreateList_Front() { linklist *head, *p; char ch; head = NULL; printf("依次输入字符数据(‘#’表示输入结束):\n"); ch = getchar(); while(ch != '#') { p = (linklist*)malloc(sizeof(linklist)); p->data = ch; p->next = head; head = p; ch = getcha

链表的头插法和尾插法

链表的头插法和尾插法 本文的链表均是带头结点的链表. 链表可以说是最简单的链式结构,在C语言中,通常用结构体封装其数据域及指针域作为一个结点. 今天我们说的是链表结点的构造方式以及插入方式. 尾插法 1 //尾插法 2 3 void createlistR(LNode *&C,int a[],int n){ 4 LNode *s,*r; 5 int i; 6 C = (LNode*)malloc(sizeof(LNode)); 7 C->next = NULL; 8 r = C; 9 for

单链表 初始化 创建 头插法 尾插法 插入 删除 查找 合并 长度

#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR -1 #define TRUE 1 #define FALSE -1 #define NULL 0 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define LEN sizeof(LNode) #

C实现头插法和尾插法来构建单链表(不带头结点)

链表的构建事实上也就是不断插入节点的过程.而节点的插入能够分为头插法和尾插法. 头插法就是在头结点后插入该节点,始终把该节点作为第一个节点.尾插法就是在链表的最后一个节点处插入元素,作为最后一个节点.假设想要了解链表的概念和其它链表操作.请參考<数据结构与算法之链表><C语言实现链表的基本操作>两篇文章.演示样例代码上传至  https://github.com/chenyufeng1991/HeadInsertAndTailInsert . // // main.c // Hea

给定数组,创建(带头节点)的单链表(头插法、尾插法)

一般有两种常用的方法来建立单链表:头插法与尾插法. (1)头插法:每次将新申请的节点插在头节点的后面: 简单来说,就是把新加进的元素放在表头后的第一个位置: 首先,让新节点的next指向头节点之后:然后,让表头的next指向新节点. (2)尾插法:每次将新申请的节点插在终端节点的后面. #include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node *next; } NODE; /

C实现头插法和尾插法来构建链表

链表的构建其实也就是不断插入节点的过程.而节点的插入可以分为头插法和尾插法.头插法就是在头结点后插入该节点,始终把该节点作为第一个节点.尾插法就是在链表的最后一个节点处插入元素,作为最后一个节点.如果想要了解链表的概念和其他链表操作,请参考<数据结构与算法之链表><C语言实现链表的基本操作>两篇文章.示例代码上传至  https://github.com/chenyufeng1991/HeadInsertAndTailInsert . // // main.c // HeadIns

C实现头插法和尾插法来构建非循环双链表(不带头结点)

在实际使用中,双链表比单链表方便很多,也更为灵活.对于不带头结点的非循环双链表的基本操作,我在<C语言实现双向非循环链表(不带头结点)的基本操作>这篇文章中有详细的实现.今天我们就要用两种不同的方式头插法和尾插法来建立双链表.代码上传至  https://github.com/chenyufeng1991/HeadInsertAndTailInsertDoubleList  . 核心代码如下: //尾插法创建不带头结点的非循环双向链表 Node *TailInsertCreateList(No