1. 移除链表节点
public class RemoveElements203 {
//定义一个单链表
public class ListNode {
int val; //当前节点值
ListNode next; //下一个节点值
//构造方法 初始化当前节点值
ListNode(int x) { val = x; }
}
/**移除链表节点
*时间复杂度 O(n)
* @param head
* @param val
* @return
*/
public ListNode removeElements(ListNode head, int val) {
//增加哑元节点 用来定位头结点
ListNode sentinel = new ListNode(0);
sentinel.next = head;
//创建前节点 和 当前节点
ListNode prev = sentinel, curr = head;
//当前节点不为空一直循环,直到链表结束
while (curr != null) {
//当前节点值等于给定值 当前节点的前节点next指向当前节点的下一个节点
if (curr.val == val){
prev.next = curr.next;
//当前节点值不等于给定值 让前指针向前移动一位 前节点等于当前节点
} else{
prev = curr;
}
//让指针向后移动一位 判断下一个节点是否为空
curr = curr.next;
}
return sentinel.next;
}
}
2. LeetCode代码测试