咱啥话也不多说,直接上代码!
package linkedNode;
import java.util.Scanner;
/**
* 链表相关练习
*/
public class LinkedNode {
public static class ListNode {
int value = 0;
ListNode next = null;
public ListNode() {
}
public ListNode(int value, ListNode next) {
this.value = value;
this.next = next;
}
}
public static void main(String[] args) {
}
/**
* 一般设计最近使用之类的功能时用头插法去做
* 1.插入速度快。每次都只要插在头节点
* 2.数据按插入顺序倒叙排列,遍历时时按照插入倒序输出
* 3.头节点永远在变化,需要维护一个头节点
*/
public static void insertBeforeHead() {
Scanner sc = new Scanner(System.in);
int num = 10;
ListNode header = null;
while (num-- > 0) {
int value = sc.nextInt();
ListNode node = new ListNode(value, header);
header = node;
}
}
public static ListNode findByHeadInsert(ListNode node, int value){
if(node == null) return null;
if(node.value == value)
return node;
else
return findByHeadInsert(node.next, value);
}
/**
* 1.插入速度慢。每次插入都要遍历整个链表
* 2.遍历时按照插入正序输出
* 3.头节点永远不变。不需要维护头节点的引用
*/
public static void insertAfterTail() {
Scanner sc = new Scanner(System.in);
int num = 10;
ListNode header = new ListNode();
while (num-- > 0) {
int value = sc.nextInt();
ListNode node = new ListNode(value, null);
header.next = node;
header = node;
}
}
public static ListNode findByTailInserr(ListNode node, int value){
if(node == null) return null;
if(node.value == value)
return node;
else
return findByTailInserr(node.next, node.value);
}
}
头插法特点:
1.插入速度快,每次都是插在头部节点。
2.遍历时按照插入时倒叙输出
3.需要维护一个头节点,每次插入进去后就将插入节点引用赋给头节点
尾插法优缺点:
1.插入速度慢,每次插入需要遍历整个链表
2.遍历时按照插入顺序输出
3.头节点永远不变,不需要维护头节点引用。
头插法适合做如网站的最近使用功能。