右侧
黑客技术
当前位置:网站首页 > 网络黑客 > 正文

单链表指定位置添加的原理_在单链表设置头结点的作用

作者:hacker发布时间:2022-11-29分类:网络黑客浏览:89评论:3


导读:导航:1、数据结构单链表?2、单链表的原理3、Java中单向链表怎么将节点插入到指定位置?4、单双向链表原理数据结构单链表?举一个现实中的例子你就明白了:...

导航:

数据结构单链表?

举一个现实中的例子你就明白了:

假设有apcde5个小朋友依次手拉着手组成了一个链表a-p-c-d-e,现在来了一个小朋友q,老师要他插到p的后面,如果他只拉着p的手,而不拉着c的手,那链表是不是就断了,变成了两个链表a-p-q和c-d-e。

所以,这里的q-next=p-next;的意思就相当于让q的一只手先拉着c的一只手(此时的c一只手拉着p和q,另一只手拉着d),而p-next=q;的意思就相当于让p松开与c的手转而拉着q的另一只手,这样就形成了一个完整的链表。

当然,在现实中q和p、c中的谁先拉手是不重要的,但对于链表,q必须先和c拉手,因为只有通过p-next才能找到c,如果q先和p拉手(即执行p-next=q;),那链表就断了,再也没有办法找到c了(因为现在的p-next是q而不是c了,也没有其它指针指向c)。

总之记住,在链表中插入一个结点时顺序很重要,是先连后断。

比如,要将x插在p和q之间,必须先令x和q连接起来,然后断开原来的p和q之间的连接,转而令p和x建立连接。

单链表的原理

首先要了解链表的数据结构,单链表一般由数据内容和一个指针组成,你的代码就是一个单链表,data定义了一个结构(delphi叫做记录),它包含一个ingteger型的变量num,next是指针,他指向下个一链表节点,你可以通过第一个链表节点的next指针,一个一个的遍历后面的元素,来访问每个节点的内容。 链表的好处是,由于动态创建每个节点,占用空间比数组要小,但是查询速度要比数组慢一些,不过在节点数量小的情况下,速度可以忽略不计。 建议你学习一些数据结构的知识,链表除了单链表外,还有双链表等,除了链表外还有其它很多数据结构,都是很有用的。

Java中单向链表怎么将节点插入到指定位置?

你可能对链表的数据结构并不是很清楚 给你个写示例代码理解下,最好打个断点每一步跟踪理解一下

//class ListNode {

//    int val;

//    jdb.ListNode next;

//    ListNode(int x) { val = x; }

//}

public class Main {

    public static void main(String[] args) throws Exception {

        //现在有一个链表1-2-3

        ListNode listNode = new ListNode(1);

        listNode.next = new ListNode(2);

        listNode.next.next = new ListNode(3);

        listNode.next.next.next = new ListNode(4);

        //我们来打印一下

        printListNode(listNode);

        //我现在要在2后面插入9

        boolean flag = insertVal(listNode, 3, 9);

        System.out.println("是否插入成功:"+flag);

        //再来打印一下

        printListNode(listNode);

    }

    /**

     *

     * @param listNode//原链表

     * @param pre//插入前的位置

     * @param val//插入的值

     */

    public static boolean insertVal(ListNode listNode,Integer pre, Integer val) {

        boolean rs = false;

        //找插入前的位置

        while (listNode != null  listNode.val != pre) {

            listNode = listNode.next;

        }

        if (listNode != null listNode.val==pre) {

            //找到啦

            //先把原链表后的数据保存起来 这边就是3-4

            ListNode temp = listNode.next;

            //把要插入的值连上,再把原来保存的值连上

            listNode.next = new ListNode(val);

            listNode.next.next = temp;

            //上面代码中 listNode的值是2,listNode.next的值是9,listNode.next.next的值就是刚才保存的临时链表3-4

            //插入成功标记一下哦

            rs=true;

        }

        return rs;

    }

    /**

     * 打印呀

     * @param listNode

     */

    public static void printListNode(ListNode listNode) {

        if (listNode != null) {

            ListNode temp = listNode;

            while (temp != null) {

                System.out.println(temp.val);

                temp = temp.next;

            }

        }

        System.out.println("-------------");

    }

}

单双向链表原理

双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。

1链表操作编辑

双向链表

双向链表

线性表的双向链表存储结构:

带头结点的双向循环链表的基本操作:

销毁双向循环链表L:

重置链表为空表:

验证是否为空表:

2元素操作编辑

计算表内元素个数

赋值:

查找元素:

查找元素前驱:

查找元素后继:

查找元素地址:

元素的插入:

元素的删除:

正序查找:

逆序查找:

3循环链表编辑

循环链表是一种链式存储结构,它的最后一个结点指向头结点,形成一个环。因此,从循环链表中的任何一个结点出发都能找到任何其他结点。循环链表的操作和单链表的操作基本一致,差别仅仅在于算法中的循环条件有所不同。

标签:单链表指定位置添加的原理


已有3位网友发表了看法:

  • 访客

    访客  评论于 2022-11-29 23:46:44  回复

    表外,还有双链表等,除了链表外还有其它很多数据结构,都是很有用的。Java中单向链表怎么将节点插入到指定位置?你可能对链表的数据结构并不是很清楚 给你个写示例代码理解下,最好打个断点每一步跟踪理解一下//class ListNode {//    i

  • 访客

    访客  评论于 2022-11-30 08:20:15  回复

    rgs) throws Exception {        //现在有一个链表1-2-3        ListNode listNode = new ListNode(1);        listNode.next = new ListNode

  • 访客

    访客  评论于 2022-11-30 06:31:53  回复

       if (listNode != null) {            ListNode temp = listNode;            while (temp != null) {       

欢迎 发表评论:

网络黑客排行
最近发表
标签列表