目录
创建链表
属性
- int val
- ListNode next
构造器
- 无参构造
- 有参构造
重写toSting方法
静态方法打印链表
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;
}
@Override
public String toString() {
return "ListNode{" +
"val=" + val +
'}';
}
public static void print(ListNode head) {
if (head != null) {
System.out.println(head);
print(head.next);
}
}
}
删除链表元素
以单链表为例
- 如果要删除一个元素是需要知道这个元素的前一个节点
- 需要定义两个变量:pre指向当前节点的前一个元素,cur指向当前节点
- 判断当前节点是否是需要删除的节点,通过对比val值
- 循环结束条件,cur == null 时结束
- 最后返回新的头结点。
public class RemoveElements {
public static void main(String[] args) {
ListNode node1 = new ListNode(1);
ListNode node2 = new ListNode(4);
ListNode node3 = new ListNode(2);
ListNode node4 = new ListNode(4);
node1.next = node2;
node2.next = node3;
node3.next = node4;
// 删除操作前打印
print(node1);
ListNode node = removeElements(node1, 4);
// 删除操作前打印
System.out.println("=====================");
print(node);
}
public static ListNode removeElements(ListNode head, int val) {
if (head == null) {
return null;
}
// 定义一个虚拟头结点
ListNode dummy = new ListNode(-1);
// 将虚拟头结点与原始头结点进行连接
dummy.next = head;
ListNode pre = dummy;
ListNode cur = head;
while (cur != null) {
if (cur.val == val) {
pre.next = cur.next;
} else {
pre = pre.next;
}
cur = cur.next;
}
return dummy.next;
}
}
结果