给你一个链表的头节点 head 和一个整数 val
请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
例如:

想要做好题,就要先理解力扣给得参数,看下图:


力扣上传了二个参数过来:
head 代表链表的头节点
val 代表要删除的元素
题解:
创建二个变量,cur 赋值 head.next ,它指向 head 引用的地址,prev 赋值 head,它指向 head
cur 用来判断当前需要删除的节点
prev 代表当前需要删除节点的前一个节点

源题代码:
class Solution {
public ListNode removeElements(ListNode head, int val) {
//判断链表是否为空链表
if(head == null){
return null;
}
ListNode cur = head.next;//cur 存储的是 head 下一个节点地址
ListNode prev = head; // perv 指向 head 头节点
while(cur != null){
// 判断 cur 所在节点的值是否等于 val 元素
if(cur.val == val){
prev.next = cur.next;
cur = cur.next;
}else{
prev = cur;
cur = cur.next;
}
}
// 判断第一个节点是否等于 val 值
if(head.val == val){
head = head.next;
}
// 返回新的节点
return head;
}
}
给你一个单链表的头节点 head ,请你反转链表,并返回反转后的链表

力扣上传了一个参数过来:

head 代表链表的头节点
题解:
最先判断传过来的参数是否为 null ,之后判断传过来的链表是否是只有一个节点
如果只有一个节点直接返回不用反转
接下来就是先把头节点制为 null ,之后是修改节点的指向

源题代码:
class Solution {
public ListNode reverseList(ListNode head) {
if(head == null){
return null;
}
if(head.next == null){
return head;
}
ListNode cur = head.next;
head.next = null;
while(cur != null){
ListNode curNext = cur.next;
cur.next = head;
head = cur;
cur = curNext;
}
return head;
}
}
给定一个头结点为 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示范1:
链表元素:1 2 3 4 5
其中间元素是: 3
示范2:
链表元素:1 2 3 4 5
其中间元素是: 3 和 4 返回第二个元素 4