头插法
头插法就是在已有的节点的前面插入新节点
如何实现
(1)先定义一个节点类ListNode,里面有value值和地址
public class ListNode {int value;ListNode next;public ListNode(int value){this.value = value;}@Overridepublic String toString() {return "ListNode{" +"value=" + value +", next=" + next +'}';}
}
(2)再创建一个链表类,里面定义一个头节点,ListNode head = null;把第一个节点的指针传给它,然后用头插法插入一个新的节点
下面是头插法的代码:
/*** 头插法 结果是逆序* @param value*/public void headInsert(int value){ListNode node = new ListNode(value);if(head == null){head = node;return ;}node.next = head;head= node;}
尾插法
在链表的最后面插入节点
尾插法与头插法不同的是,先要找到链表最后面那个节点,所以就要定义一个游标index,index从头结点开始,如果index.next不是null,那么就往后面走,直到找到最后一个节点
此时游标index在头结点
尾插法的相关代码:
/*** 尾插法* @param value*/public void headFront(int value){ListNode node = new ListNode(value);if(head ==null){head = node;return ;}ListNode index = head;while(index.next != null){index = index.next;}index.next= node;}
总的ListLink类代码如下:
public class LinkList {public ListNode head;/*** 头插法 结果是逆序* @param value*/public void headInsert(int value){ListNode node = new ListNode(value);if(head == null){head = node;return ;}node.next = head;head= node;}/*** 尾插法* @param value*/public void headFront(int value){ListNode node = new ListNode(value);if(head ==null){head = node;return ;}ListNode index = head;while(index.next != null){index = index.next;}index.next= node;}
}
测试类:
public class Test {public static void main(String[] args) {LinkList linkList =new LinkList();//头插法的测试
// linkList.headInsert(5);
// linkList.headInsert(7);
// linkList.headInsert(15);
// linkList.headInsert(25);
// linkList.headInsert(45);
// linkList.headInsert(6);
// System.out.println(linkList.head);//尾插法的测试linkList.headFront(3);linkList.headFront(6);linkList.headFront(4);linkList.headFront(78);linkList.headFront(34);linkList.headFront(28);linkList.headFront(12);System.out.println(linkList.head);}
}
要注意的是 头插法的结果是倒序的,而尾插法的结果是正序的