头插法(逆序)和尾插法(顺序)实现单链表的创建与排序
2017-03-22 18:04
3607 查看
链表是线性表的一种表示形式,和线性表的另一种表达形式——数组不同。在链表中,没有固定长度的设定,表中节点是彼此相连的,表中的每一个节点链接下一个节点(即后继),链表头(Head)指向链表的第一个节点。所以,要想找到某一节点的位置,只需要确定它的上一结点的位置即可。这种性质使得链表的创建与插入变得相当灵活。
链表的创建有两种方法:头插法 和 尾插法
1.头插法: 在链表的开头插入一个新的节点,也就是,必须使得链表头Head指向新节点,该新节点指向原来是表头的第一个节点。下图为头插法的具体情况:每个新节点都插在了原来第一个节点的前面。而有这种方法新建的链表是后来居前的,也就是链表是逆序的
插入步骤:
Node newNode; //生成新节点newNode
Node curr --> head.next ;
newNode.--> curr; //新节点指向原来的第一节点
head --> newNode;//头部指向新节点
2.尾插法:在链表的尾部插入一个节点。尾插法是比较容易理解并令大家习惯的插入形式,生成一个新节点后直接插入链表的微端,也就是让原来最后一个节点指向该新节点。这也是链表长度增长的一种最基本的方式。后来局后,生成的链表是顺序的。
插入步骤:
Node newNode; // 生成新节点newNode
prev --> newNode; // 尾部指向新节点
应用举例:
Java 实现一个链表的逆序表达输出
链接:https://www.nowcoder.com/questionTerminal/75e878df47f24fdc9dc3e400ec6058ca
来源:牛客网
/**
链表节点类的定义
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head)
{
if(head == nulll)
{
return head; //如果链表为空,返回NULL
}
ListNode pre = null; //分成两部分,pre 为已经逆序的部分,pro是还没有逆序的部分
ListNode pro = null;
while(head != null) //如果链表不为空,则进入循环,遍历每一个节点
{
pos = head.next; //将head.next放入没有逆序的部分pro,为该部分第一个节点
head.next = pre; //将head指向已经逆序的部分pre
pre = head; //head为逆序部分的第一个节点
head = pos; //循环指向没有逆序的部分的头部
}
return pre; //返回全部逆序好的新链表
}
链表的创建有两种方法:头插法 和 尾插法
1.头插法: 在链表的开头插入一个新的节点,也就是,必须使得链表头Head指向新节点,该新节点指向原来是表头的第一个节点。下图为头插法的具体情况:每个新节点都插在了原来第一个节点的前面。而有这种方法新建的链表是后来居前的,也就是链表是逆序的
插入步骤:
Node newNode; //生成新节点newNode
Node curr --> head.next ;
newNode.--> curr; //新节点指向原来的第一节点
head --> newNode;//头部指向新节点
2.尾插法:在链表的尾部插入一个节点。尾插法是比较容易理解并令大家习惯的插入形式,生成一个新节点后直接插入链表的微端,也就是让原来最后一个节点指向该新节点。这也是链表长度增长的一种最基本的方式。后来局后,生成的链表是顺序的。
插入步骤:
Node newNode; // 生成新节点newNode
prev --> newNode; // 尾部指向新节点
应用举例:
Java 实现一个链表的逆序表达输出
链接:https://www.nowcoder.com/questionTerminal/75e878df47f24fdc9dc3e400ec6058ca
来源:牛客网
/**
链表节点类的定义
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head)
{
if(head == nulll)
{
return head; //如果链表为空,返回NULL
}
ListNode pre = null; //分成两部分,pre 为已经逆序的部分,pro是还没有逆序的部分
ListNode pro = null;
while(head != null) //如果链表不为空,则进入循环,遍历每一个节点
{
pos = head.next; //将head.next放入没有逆序的部分pro,为该部分第一个节点
head.next = pre; //将head指向已经逆序的部分pre
pre = head; //head为逆序部分的第一个节点
head = pos; //循环指向没有逆序的部分的头部
}
return pre; //返回全部逆序好的新链表
}
相关文章推荐
- 逆序和顺序创建单链表
- 链表的创建、测长、排序、插入、逆序的实现(C语言)
- c语言实现单链表的操作:创建,删除,插入,反转, 排序等
- 实现两个有序单链表的合并。要求:随机创建两个单链表,实现单链表的排序,再对两个有序单链表进行合并。
- 顺序表、单链表、循环单链表、循环双链表、有序单链表的排序的实现
- 单链表(二):如何实现单链表的排序、逆置(逆序)
- 带有头指针的链表的 创建 输出 查找 删除 释放 排序(冒泡排序)功能实现(尾插法(自动记录最后一个节点))
- 单链表(二):如何实现单链表的排序、逆置(逆序)
- 单链表创建-遍历-排序-插入-删除-逆序操作
- java实现单链表的初始化,创建,删除,插入,查找,排序,同项删除,退出等功能
- 用尾插法实现单链表整表创建
- java-实现汉字按字母顺序排序
- 单链表的实现(包括就地逆转单链表,表排序, 合并单链表、判断表是否有环)
- 链表的各种操作实现 链表逆序 链表排序 有序链表归并 链表存在环的判定
- 尾插法创建单链表
- 利用case或者decode实现自定义顺序排序
- 测试排序函数常用的三个数组:顺序、逆序和乱序
- 实现Table多类间不同类型的顺反(逆序)排序
- 实现Table多列顺反排序(逆序)
- 单链表的整表创建--头插法,尾插法