码云笔记_1——Java创建链表的方法#前插后插

他奶奶的,实验室吵死了,键盘声就不能小一点。
今天刷题做到了leetcode#82,做一会又掉进了链表的大坑,总是对链表赋值链表很迷惑,一会儿就绕晕了,因此想总结一下。


正文开始

代码段①:

ListNode dummy=new ListNode();
ListNode tail=dummy;

dummy为新建的一个结点,会给一个新地址:dummy地址
新建结点tail并将dummy赋值给tail,此时tail的地址会与dummy的相同。
tail地址
当改变tail的值时,例如tail=tail.next;的时候并不会改变dummy的地址,而是只改变了tail自己。此时dummy就相当于一个哨兵,站在链表的表头,而tail就是前线冲锋的战士,可以指向任意的新建结点或者参数结点进行链表赋值,而当后续需要返回整个结点的时候就可以直接返回dummy


代码段②:

                tail.next=head;
                tail=head;

首先将tail的next指向head,意思就是将tail所指向的结点与head指向的结点相连接。然后将head赋值给tail,即tail指向head所指向的结点,实现整个链表的遍历后移。

该结构可用于取出链表当中有重复元素的,或者指定阀值需要删除的结点。而tail.next=head;此时就可以实现结点跳跃的功能。


代码段③:
创建链表:后插法

ListNode p = new ListNode(m);
if (head == null) {
     newnode = head = p;
} else {
     newnode.next = p;
     newnode = p;
}

创建表头结点指向链表表头(表头):head
创建遍历结点:newnode
创建动态中间节点:p
首先判断是否是第一次插值:head==null,如果是第一次插值需将新建结点newnode与表头结点head全都指向p,之后每次过来一个新的值便将p指向新值,之后很重要的一步也是很容易搞混的一步:必须先将newnode的next指向p结点,即先将p结点与链表连接起来,然后再将newnode结点后移,即newnode=p千万不能直接newnode=p,这样会导致整个链表前面的结点数据全部丢失。


代码段④:
创建链表:前插法

ListNode p=new ListNode(m);
if(head==null){head=p;}
else{
ListNode newnode=new ListNode();
newnode=head;
head=p;
p.next=newnode;
}

前插法也叫头插法。
首先创建表头结点:head
然后创建新建结点:p
创建中间中转结点:newnode
如果是第一次插入,即此时只有一个head结点且head结点为null:head==null,直接将新节点p赋值给head结点。当下一次再来一个结点的时候,重点来了首先需要先创建一个中间节点,用来指向当前head结点所指向的链表,防止链表数据丢失!!!然后将新建的节点p复制给head,最后再将head指向刚才已经上过保险的newnode,这样就将新节点p完美的接过来了。


今天的需要注意的基本就是这些了,明天继续刷题!
不说了,继续学习!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值