1、带头结点的单链表(推荐使用带头结点的单链表)(采用尾插法)

  • 了解单链表中节点的构成



    从上图可知,节点包含数据域和指针域,因此,在对节点进行定义时,我们可以如下简单形式地定义:
/* 定义链表 */
typedef struct Node{
int data; // 数据域
struct Node *next; // 指针域(后节点)
// struct Node *next; // 指针域(前节点),这里暂时不考虑双链表表
}Node, *LinkedList;
  • 尾插法思想

    尾插法的思想其实很简单,通俗来讲就是每创建一个新节点都插到原来链表的后面。



    !

Node *Head, *L, *LNew;
/* 申请节点 */
Head = (Node *)malloc(sizeof(Node));
/* 带头结点 */
L = Head;
L->next = NULL; /* 初始赋值 */
for(int i = 0; i < 3; ++i){
/* 申请节点 */
LNew = (Node *)malloc(sizeof(Node));
LNew->data = i;
L->next = LNew;
LNew->next = NULL;
L = LNew;
}
  • 简单的代码
#include <iostream>
using namespace std; /* 定义链表 */
typedef struct Node{
int data;
struct Node *next;
}Node, *LinkedList; /* 链表初始化 */
LinkedList LinkedListInit(){
Node *Head, *L, *LNew;
/* 申请节点 */
Head = (Node *)malloc(sizeof(Node));
/* 带头结点 */
L = Head;
L->next = NULL; /* 初始赋值 */
for(int i = 0; i < 10; ++i){
/* 申请节点 */
LNew = (Node *)malloc(sizeof(Node));
LNew->data = i;
L->next = LNew;
LNew->next = NULL;
L = LNew;
} /* 返回头结点指针 */
return Head;
} int main()
{
Node *p;
p = LinkedListInit();
p = p->next;
while(p != NULL){
cout << p->data << ' ';
p = p->next;
}
cout << endl;
return 0;
}

2、不带头结点的单链表(原理与带头结点类似)

  • 不带头结点与带头结点的区别

    由于不带头结点的单链表第一个节点需要有效,因此,在处理第一个节点时,需要做节点迁移。





Node *Head, *L, *LNew;
/* 申请节点 */
Head = (Node *)malloc(sizeof(Node));
/* 不带头结点 */
L = Head = NULL; /* 初始赋值 */
for(int i = 0; i < 4; ++i){
/* 申请节点 */
LNew = (Node *)malloc(sizeof(Node));
LNew->data = i;
LNew->next = NULL;
if(L == NULL){
L = Head = LNew;
}else{
L->next = LNew;
}
L = LNew;
}
  • 简单的代码
#include <iostream>
using namespace std; /* 定义链表 */
typedef struct Node{
int data;
struct Node *next;
}Node, *LinkedList; /* 链表初始化 */
LinkedList LinkedListInit(){
Node *Head, *L, *LNew;
/* 申请节点 */
Head = (Node *)malloc(sizeof(Node));
/* 不带头结点 */
L = Head = NULL; /* 初始赋值 */
for(int i = 0; i < 5; ++i){
/* 申请节点 */
LNew = (Node *)malloc(sizeof(Node));
LNew->data = i;
LNew->next = NULL;
if(L == NULL){
L = Head = LNew;
}else{
L->next = LNew;
}
L = LNew;
} /* 返回头结点指针 */
return Head;
} int main()
{
Node *p;
p = LinkedListInit();
while(p != NULL){
cout << p->data << ' ';
p = p->next;
}
cout << endl;
return 0;
}

最新文章

  1. css_随笔
  2. PHP的变量和常量
  3. nmon--非常棒的LINUX/AIX性能计数器监测和分析工具
  4. VBA操作单元格
  5. 解决AutoCAD2010在VS2010上无法命中断点
  6. Retrofit 2.1 入门
  7. web安全及防护
  8. delete all untracked files
  9. 现代程序设计 homework-07
  10. MySQL5.6监控表之INNODB_METRICS
  11. ASP.NET网络爬虫小研究 HtmlAgilityPack基础,爬取数据保存在数据库中再显示再自己的网页中
  12. Vue中使用Cropper.js裁剪图片
  13. Django 正向解析与反向解析
  14. 《剑指offer》第二十二题(链表中倒数第k个结点)
  15. 【高可用HA】Apache (3) —— Mac下配置Apache Httpd负载均衡(Load Balancer)之mod_proxy
  16. php 访问用友u8数据
  17. underscore.js 分析 第二天
  18. Qt5.5.1移植到freescale imx6
  19. 自己动手开发更好用的markdown编辑器-04(实时预览)
  20. Ubuntu 14.10 配置JDK + J2EE

热门文章

  1. Call to undefined function Think\C()
  2. linux系统学习(一)
  3. (转)走进AngularJs(六) 服务
  4. Java中的http(网络处理)相关的库:HttpClient,HttpCore(转载)
  5. 8、Semantic-UI之其他按钮样式
  6. php 将二维数组批量插入到数据库中
  7. Android-主题
  8. [LeetCode 题解]:Gas Station
  9. Exception has been thrown by the target of an invocation
  10. 网易严选的wkwebview测试之路