4.2在链表中添加元素

对于链表来说,我们要想访问存在在链表中的所有的节点,必须把链表的头给存储起来,头:head,也就是说在LinkedList这个类中,应该有个node型的变量,叫head,它指链表中的第一个节点。

1 //声明LinkedList中基本的成员变量head,size
2 private Node head; 
3 private int size;//记录链表中有多少个元素

 1   // 在链表头添加新的元素e
 2     public void addFirst(E e){
 3 //        Node node = new Node(e);
 4 //        node.next = head;       //node.next指向head,原本的头元素head变成e后面一位.
 5 //        head = node;          //head指向node,新添加的元素e变成头元素
 6 
 7         head = new Node(e, head);//上面三行的另一种写法,首先new一个Node,对于new出来的Node,存入的就是e,而这个Node让他直接指向当前这个链表的head,然后赋值个head
 8                                    //注:前面创建了构造函数 public Node(E e, Node next)
 9         size ++;
10     }

 1后面插666,,66后面接2。

要把666插入到正确的位置,必须要找到当我们插入666这个节点之后,节点666前的节点是谁,记这个谁为prev

 

 1 // 在链表的index(0-based)位置添加新的元素e
 2     // 在链表中不是一个常用的操作,练习用:)
 3     public void add(int index, E e){
 4 
 5         if(index < 0 || index > size)     //判断index的合法性,index可以取到size,即可在链表的末尾添加一个元素
 6             throw new IllegalArgumentException("Add failed. Illegal index.");
 7 
 8         if(index == 0)//如果在链表头添加元素
 9             addFirst(e);
10         else{
11             Node prev = head;
12             for(int i = 0 ; i < index - 1 ; i ++)
13                 prev = prev.next;  //把当前prev存的节点的下一个节点放进prev这个变量中。prev这个变量就会在链表中一直移动,直到移动到 index - 1这个位置,
14                                     //我们就找到了等待插入的节点的前一个节点
15 //            Node node = new Node(e);
16 //            node.next = prev.next;
17 //            prev.next = node;
18 
19             prev.next = new Node(e, prev.next);//上面3行的另一种写法
20             size ++;
21         }
22     }

完整代码

 1 public class LinkedList<E> {
 2     //******************创建LinkedLis的内部类Node***********************//
 3     private class Node{
 4         public E e;
 5         public Node next;
 6 
 7         public Node(E e, Node next){
 8             this.e = e;
 9             this.next = next;
10         }
11 
12         public Node(E e){
13             this(e, null);
14         }
15 
16         public Node(){
17             this(null, null);
18         }
19 
20         @Override
21         public String toString(){
22             return e.toString();
23         }
24     }
25    //***************************创建内部类Node**********结束********//
26 
27     //%%%%%%%%%%%%%%%%%%%%%%%%%%创建类LinkedList的成员变量和构造方法%%%%%%%%%%%%%%%%%%%//
28     private Node head;  //声明LinkedList中基本的成员变量head,size
29     private int size;//记录链表中有多少个元素
30 
31     public LinkedList(){   //设置链表构造函数
32         head = null;       //用户初始化链表head为空,也就是说,初始化是链表中一个元素都没有
33         size = 0;
34     }
35     //%%%%%%%%%%%%%%%%%%%%%%%%%%创建类LinkedList的成员变量和构造方法%%%%%%结束%%%%%%%%%%%%%//
36 
37             //-------------设置LinkedList的方法getSize、isEmpty、addFirst、add、addLast-------------------//
38     // 获取链表中的元素个数
39     public int getSize(){
40         return size;
41     }
42 
43     // 返回链表是否为空
44     public boolean isEmpty(){
45         return size == 0;
46     }//如果size的值为0,返回TRUE;否则返回FALSE
47 
48     // 在链表头添加新的元素e
49     public void addFirst(E e){
50 //        Node node = new Node(e);
51 //        node.next = head;       //node.next指向head,原本的头元素head变成e后面一位.
52 //        head = node;          //head指向node,新添加的元素e变成头元素
53 
54         head = new Node(e, head);//上面三行的另一种写法,首先new一个Node,对于new出来的Node,存入的就是e,而这个Node让他直接指向当前这个链表的head,然后赋值个head
55                                    //注:前面创建了构造函数 public Node(E e, Node next)
56         size ++;
57     }
58 
59     // 在链表的index(0-based)位置添加新的元素e
60     // 在链表中不是一个常用的操作,练习用:)
61     public void add(int index, E e){
62 
63         if(index < 0 || index > size)     //判断index的合法性,index可以取到size,即可在链表的末尾添加一个元素
64             throw new IllegalArgumentException("Add failed. Illegal index.");
65 
66         if(index == 0)//如果在链表头添加元素
67             addFirst(e);
68         else{
69             Node prev = head;
70             for(int i = 0 ; i < index - 1 ; i ++)
71                 prev = prev.next;  //把当前prev存的节点的下一个节点放进prev这个变量中。prev这个变量就会在链表中一直移动,直到移动到 index - 1这个位置,
72                                     //我们就找到了等待插入的节点的前一个节点
73 //            Node node = new Node(e);
74 //            node.next = prev.next;
75 //            prev.next = node;
76 
77             prev.next = new Node(e, prev.next);//上面3行的另一种写法
78             size ++;
79         }
80     }
81 
82     // 在链表末尾添加新的元素e
83     public void addLast(E e){
84         add(size, e);
85     }
86     //-------------设置方法getSize、isEmpty、addFirst、add、addLast--结束-----------------//
87 }
带女朋友搬家新家条件不好,累到女朋友了,让女朋友受苦了,特此明志:每天学习,明年这个时候(20190812)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
原文地址:https://www.cnblogs.com/make-big-money/p/10320587.html