一,定义节点类
//定义节点类
public class ListNode {
int val;//数据域
ListNode next;//指针域
ListNode() {}//构造方法
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
二、创建一个新的节点。ListNode list=new ListNode(0)
ListNode list=new ListNode() 初始化一个空节点,无值,不提倡此种写法。
ListNode list=new ListNode(0) 初始化一个节点值为0的空节点,最常用最正规写法
ListNode list=null 为空,什么都没有,一般不这么写;
哨兵节点
我们在做题的时候,常常要进行插入,删除等操作,不可避免的会使头结点丢失。这个时候我们就要定义一个节点来保存头结点,这个节点就是哨兵节点。一般的,我们进行做题的时候,只需要对b进行操作,最后返回a就可以了。
ListNode a = new ListNode(0);
ListNode b = a;
三,遍历,插入,删除 。
遍历
public void displayAllNodes(ListNode list) {
ListNode current = list;
while (current != null) {
System. out.println(current.val);
current = current. next;
}
}
插入,将链表的头结点指向的节点放到待插入的节点的后面,然后让头结点指向待插入节点即可。插入其他位置都是这样的思路。
public void add(ListNode list,int a) {
ListNode aNode = new ListNode(a);
ListNode current = list;
//在头节点插入
aNode.next=current.next;
current.next=aNode;
}
删除。 让所需要删除的节点等于它下一个节点即可。
public void add(ListNode list) {
ListNode current = list;
//删除头结点
current = current.next;
}