学习目标:
目标:熟练运用Java数据结构所学知识
学习内容:
本文内容: 使用Java解决:移除链表元素
题目描述
删除链表中等于给定值 val 的所有节点。
示例:
输入: 1->2->6->3->4->5->6, val = 6
输出: 1->2->3->4->5
解题思路
- 方法一:
首先这个题用到的删除链表结点的知识点,不一样的是需要删除所有val等于给定值的节点 ,所以需要在while循环里面嵌套 if 判断语句;
首先声明以下代码 取出头结点;
ListNode prev = head;
当prev.next不为null时进入while循环;
嵌套的 if 语句为 if (prev.next.val == val),代表找到了对应结点;
然后使用以下代码删除该结点
prev.next = prev.next.next;
- 方法二:
可以创建傀儡结点,这样就不用将头结点和中间结点分开判断了
实现代码
- 方法一:
public static Node delete(Node head, int val) {
if(head==null){
return null;
}
ListNode prev = head;
//当前结点的下一个结点不为空时
while (prev.next != null) {
//下一个结点的val等于给定值时
if (prev.next.val == val) {
prev.next = prev.next.next;//删除该节点
}else{
prev = prev.next;
}
}
//判断头结点的val是不是给定值,如果等于给定值,则删除头结点
if(head.val==val){
head=head.next;
}
return head;
}
- 方法二:
public static ListNode removeElements(ListNode head, int val) {
ListNode dummy = new ListNode(0);//傀儡结点
dummy.next = head;
ListNode prev = dummy;
ListNode cur = head;
while (cur != null) {
if (cur.val == val)
prev.next = cur.next;//删除结点
else
prev = cur;
cur = cur.next;
}
return dummy.next;
}