0 课程地址
https://coding.imooc.com/lesson/207.html#mid=13430
1 重点关注
1.1 链表插值动画模拟
(可以理解为火车尾加车厢,只不过是火车尾被称为head)
- 链表头部添加元素
- 链表中间添加元素
2 课程内容
3 Coding
3.1 关键代码
- 内部类Node
(重点看Node(E e,Node nodeNew)),这个方法是把元素存入当前节点,把指针指向传过来的节点
/** * 1 内部类node * @author weidoudou * @date 2022/10/28 7:59 * @return null **/ private class Node{ //Node 只有两个属性,下一个节点和本节点存储的元素 private Node next; private E e; /** * 通用调用node方法 * @author weidoudou * @date 2022/10/28 8:17 * @param e 请添加参数描述 * @param nodeNew 请添加参数描述 * @return null **/ public Node(E e,Node nodeNew){ this.e = e; this.next = nodeNew.next; } /** * node 无参构造 * @author weidoudou * @date 2022/10/28 8:15 * @return null **/ public Node(){ this(null,null); } /** * node 有参构造 * @author weidoudou * @date 2022/10/28 8:16 * @param e 请添加参数描述 * @return null **/ public Node(E e){ this(e,null); } @Override public String toString() { final StringBuffer sb = new StringBuffer("Node{"); sb.append("next=").append(next); sb.append(", e=").append(e); sb.append('}'); return sb.toString(); } }
- 链表指定索引添加元素
/** * 7 链表添加元素(链表通常不在中间添加元素,编写此段代码完全是为了后续便于理解和二叉树相关知识做铺垫) * @author weidoudou * @date 2022/10/28 8:45 * @param index 请添加参数描述 * @param e 请添加参数描述 * @return void **/ public void addElement(int index,E e){ if(index<0||index>size){ throw new IllegalArgumentException("索引不正确"); } if(index==0){ addFirst(e); }else{ Node pre = head; for(int i = 0;i<index-1;i++){ pre = pre.next; } /*Node nodeNew = new Node(e); nodeNew.next = pre.next; pre.next = nodeNew;*/ //优雅写法 pre.next = new Node(e,pre.next); size++; } }
3.2 全量代码(链表添加元素)
package com.company; /*** * 链表 * @author weidoudou * @date 2022/10/28 7:56 **/ public class LikedList<E> { /** * 1 内部类node * @author weidoudou * @date 2022/10/28 7:59 * @return null **/ private class Node{ //Node 只有两个属性,下一个节点和本节点存储的元素 private Node next; private E e; /** * 通用调用node方法 * @author weidoudou * @date 2022/10/28 8:17 * @param e 请添加参数描述 * @param nodeNew 请添加参数描述 * @return null **/ public Node(E e,Node nodeNew){ this.e = e; this.next = nodeNew.next; } /** * node 无参构造 * @author weidoudou * @date 2022/10/28 8:15 * @return null **/ public Node(){ this(null,null); } /** * node 有参构造 * @author weidoudou * @date 2022/10/28 8:16 * @param e 请添加参数描述 * @return null **/ public Node(E e){ this(e,null); } @Override public String toString() { final StringBuffer sb = new StringBuffer("Node{"); sb.append("next=").append(next); sb.append(", e=").append(e); sb.append('}'); return sb.toString(); } } //2 LinkedList 属性 链表头元素(火车头),大小 private int size; private Node head; /** * 3 LikedList 无参 * @author weidoudou * @date 2022/10/28 8:27 * @return null **/ public LikedList() { this.head = null; this.size = 0; } /** * 4 getSize * @author weidoudou * @date 2022/10/28 8:23 * @return null **/ public int getSize(){ return size; } /** * 5 isEmpyt * @author weidoudou * @date 2022/10/28 8:24 * @return boolean **/ public boolean isEmpty(){ return size == 0; } /** * 6 链表头部添加元素 * @author weidoudou * @date 2022/10/28 8:37 * @param e 请添加参数描述 * @return void **/ public void addFirst(E e){ /*Node nodeNew = new Node(e); nodeNew.next = head; //火车尾指向 上个尾巴 this.head = nodeNew; //火车尾 变成了当前的node*/ //称之为优雅写法 this.head = new Node(e,head); size++; } /** * 7 链表添加元素(链表通常不在中间添加元素,编写此段代码完全是为了后续便于理解和二叉树相关知识做铺垫) * @author weidoudou * @date 2022/10/28 8:45 * @param index 请添加参数描述 * @param e 请添加参数描述 * @return void **/ public void addElement(int index,E e){ if(index<0||index>size){ throw new IllegalArgumentException("索引不正确"); } if(index==0){ addFirst(e); }else{ Node pre = head; for(int i = 0;i<index-1;i++){ pre = pre.next; } /*Node nodeNew = new Node(e); nodeNew.next = pre.next; pre.next = nodeNew;*/ //优雅写法 pre.next = new Node(e,pre.next); size++; } } /** * 8 链表尾部添加元素 认真分析下 * @author weidoudou * @date 2022/10/28 18:11 * @param e 请添加参数描述 * @return void **/ public void addLast(E e){ addElement(size,e); } }
标签:Node,10,数据结构,return,28,链表,玩转,null,public From: https://www.cnblogs.com/1446358788-qq/p/16837113.html