编辑
链表的模拟实现
在模拟实现链表前,首先我们要搭建一个链表结构。也就是初始化出一个链表,如下程序:
public class LinkedList { /** * 内部类Node */ static class Node { public int val;//存储数据 public Node next;//存储下一个节点 //构造方法 public Node(int val) { this.val = val; } } public Node head;//当前链表头节点的引用 /** * 初始化链表 */ public void init() { //通过构造方法初始化三个数据 Node val1 = new Node(1); Node val2 = new Node(2); Node val3 = new Node(3); //形成一个链表 val1.next = val2; val2.next = val3; head = val1; } }
以上程序,就实现了一个简易的链表,这个链表在内存中的布局大概如下图所示:
编辑
1.遍历链表
/** * 遍历链表 */ public void display(){ Node node = head; while(node != null) { System.out.print(node.val+" "); node = node.next; } System.out.println(); }
遍历链表,我们只需要从头节点遍历到尾节点即可。注意node!=null代表遍历到最后一个节点的下一个节点。node.next!=null代表遍历到最后一个节点。
我们在Test类来进行测试:
public class Test { public static void main(String[] args) { LinkedList linkedList = new LinkedList(); linkedList.init();//初始化链表 linkedList.display();//打印链表 } }
运行后输出:
编辑 可以看到输出的就是我们初始化的三个元素。
2.获取链表大小
/** * 获取链表的大小 * */ public int size(){ Node var = head; int count = 0; while(var!=null) { count++; var = var.next; } return count; }
获取链表的大小, 也是非常的容易的。我们只需要使当前的节点变为下一个节点,知道当前的节点变为空即可。
编辑
Test类中测试:
public class Test { public static void main(String[] args) { LinkedList linkedList = new LinkedList(); linkedList.init();//初始化链表 System.out.println(linkedList.size());//输出链表大小 } }
运行后输出:
编辑
3.从头插入数据
/** * 头插法 * @param data */ public void addFirst(int data){ Node node = new Node(data); node.next = head; head = node; }
头插法,我们不考虑链表中是否有元素。因为从头开始插入,无论链表中是否有元素,始终是从头开始插入。
编辑
Test类测试:
public class Test { public static void main(String[] args) { LinkedList linkedList = new LinkedList(); linkedList.init();//初始化链表 linkedList.addFirst(5);//在链表头头插一个5 linkedList.display();//打印链表 } }
运行后输出:
编辑
4.从尾部插入数据
/** * 尾插法 * @param data */ public void addLast(int data){ Node node = new Node(data); Node cur = head; if (head == null) { head = node; return; } while (cur.next !=null) { cur = cur.next; } cur.next = node; }
从尾部插入,也就是在链表的最后位置插入一个数据,也是非常的简单。但是与头插不同,尾插我们要考虑链表为空的情况,如果链表为空则直接使头节点head等于date的引用并且return结束程序。
编辑
Test类中测试:
public class Test { public static void main(String[] args) { LinkedList linkedList = new LinkedList(); linkedList.init();//初始化链表 linkedList.addLast(9);//在链表尾部插入一个9 linkedList.display();//打印链表 } }
运行后输出:
编辑