🎇🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!
人生格言: 当你的才华撑不起你的野心的时候,你就应该静下心来学习!
欢迎志同道合的朋友一起加油喔 💪💪💪
目标梦想:进大厂,立志成为一个牛掰的Java程序猿,虽然现在还是一个🐒嘿嘿
谢谢你这么帅气美丽还给我点赞!比个心
链表面试题
一、移除链表元素
1. 题目
2. 解析
- 特殊情况处理:
- 如果链表头节点 head 为空,直接返回 null,表示链表为空,无需处理。
if(head == null){
return null;
}
- 一般情况处理:
- 定义两个指针,
prevNode
指向当前节点
的前一个节点(初始为头节点)
,cur
指向当前节点
的下一个节点
。
ListNode prevNode = head;
ListNode cur = head.next;
- 循环遍历链表:
- 使用
cur
指针遍历链表,当cur
不为null
时执行循环。 - 如果
cur
指向的节点的值等于val
,则将prevNode.next
指向cur.next
,即跳过当前节点cur
。 - 否则,更新
prevNode 为 cur
,并将cur
移动到下一个节点。
while(cur != null){
if(cur.val == val){
prevNode.next = cur.next;
cur = cur.next;
}else{
prevNode = cur;
cur = cur.next;
}
}
- 处理头节点:
- 最后处理头节点,如果头节点的值等于
val
,则将头节点head
指向下一个节点,即跳过头节点。
if(head.val == val){
head = head.next;
}
- 返回链表头:
return head; 返回处理后的链表头节点。
3. 完整代码展示
/**
* Definition for singly-linked list.
* 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; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
//特殊情况、链表为空
if(head == null){
return null;
}
//处理一般情况
//定义两个指针,prev 指向第一个节点,cur 指向第二个节点
ListNode prevNode = head;
ListNode cur = head.next;
//循环判断条件 cur != null
//先不考虑 头节点
//从第二个节点开始排查
while(cur != null){
if(cur.val == val){
prevNode.next = cur.next;
cur = cur.next;
}else{
prevNode = cur;
cur = cur.next;
}
}
//最后处理头节点