您的位置:首页 > 其它

头插法(逆序)和尾插法(顺序)实现单链表的创建与排序

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; //返回全部逆序好的新链表

     

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息