链表插入的三种方式
2017-08-30 13:02
113 查看
链表的插入:
一、头插
1、判断空链 :
a:新节点指向NULL
b: 头指向新节点
2、非空链
a: 新节点指向头(第一个节点)
b: 头指向new
综上: 不需判断直接在头操作
代码:
void insert_head(Node * head , Node new)
{
new = * head;
* head = new;
}
二、中间插
1、判断空链表
2、非空
遍历找位置
找到 未找到
是头 不是头
是头:
new -> next = * head;
* head = new;
不是头:
new -> next = pre -> next;
pre -> next = new;
未找到:(补在链尾,此时cur为链尾指向的NULL)
pre -> next = new
new -> next = NULL
代码:
void insert_mid(Node * head , Node new)
{
Node * cur = NULL;
Node * pre = NULL;
if(* head == NULL)
{
printf(“it is empty\n”);
return;
}
else
{
cur = * head;
放前面
while(cur != NULL && cur -> data != new -> data)
{
pre = cur;
cur = cur -> next;
}
if(cur == NULL)
{
pre -> next = new;
new -> next = NULL;
}
else
{
if(* head == cur)
{
new -> next = * head;
* head = new;
}
else
{
new -> next = pre -> next;
pre -> next = new;
}
}
}
三、尾插
1、判断空链
a、插入第一个节点
2、非空链
a、找到链尾
b、将新节点插入链尾
代码:
void insert_tail(Node * head , Node new)
{
Node * cur = NULL;
}
else
{
cur = * head;
while(cur != NULL )
{
cur = cur -> next;
}
cur -> next = new;
new -> next = NULL;
}
}
一、头插
1、判断空链 :
a:新节点指向NULL
b: 头指向新节点
2、非空链
a: 新节点指向头(第一个节点)
b: 头指向new
综上: 不需判断直接在头操作
代码:
void insert_head(Node * head , Node new)
{
new = * head;
* head = new;
}
二、中间插
1、判断空链表
2、非空
遍历找位置
找到 未找到
是头 不是头
是头:
new -> next = * head;
* head = new;
不是头:
new -> next = pre -> next;
pre -> next = new;
未找到:(补在链尾,此时cur为链尾指向的NULL)
pre -> next = new
new -> next = NULL
代码:
void insert_mid(Node * head , Node new)
{
Node * cur = NULL;
Node * pre = NULL;
if(* head == NULL)
{
printf(“it is empty\n”);
return;
}
else
{
cur = * head;
放前面
while(cur != NULL && cur -> data != new -> data)
{
pre = cur;
cur = cur -> next;
}
if(cur == NULL)
{
pre -> next = new;
new -> next = NULL;
}
else
{
if(* head == cur)
{
new -> next = * head;
* head = new;
}
else
{
new -> next = pre -> next;
pre -> next = new;
}
}
}
三、尾插
1、判断空链
a、插入第一个节点
2、非空链
a、找到链尾
b、将新节点插入链尾
代码:
void insert_tail(Node * head , Node new)
{
Node * cur = NULL;
if(* head == NULL) { printf(“it is empty\n”); return;
}
else
{
cur = * head;
while(cur != NULL )
{
cur = cur -> next;
}
cur -> next = new;
new -> next = NULL;
}
}
相关文章推荐
- 数据结构之头指针链表de三种插入方式(头插法,尾插法,在pos处插入)
- 头结点链表的三种插入结点方式
- C++ 实现二叉平衡树的插入删除结点和三种遍历方式
- HTML 页面插入 SVG的三种方式
- C#批量插入数据到Sqlserver中的三种方式
- 递归,迭代,堆栈三种方式实现单链表反转(C++)
- 单向链表存储方式下插入、删除、搜索
- SQL获取插入后数据ID的三种方式比较
- 单向链表存储方式下插入、删除、搜索
- 三种插入select option的方式
- 链表中插入一个节点的三种情况
- 单向链表存储方式下插入、删除、搜索
- mysql数据库插入数据获取自增主键的三种方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式)
- java数据结构-链表实现堆栈 控制插入的方式,成为有序链表
- map容器元素的三种插入方式
- 三种方式实现--从尾到头输出链表
- 单向链表存储方式下插入、删除、搜索
- 三种方式实现--从尾到头输出链表
- 三种方式实现--从尾到头输出链表
- 链表插入元素的三种递归实现 -- 简单递归,数据累加器,函数累加器