版权声明:文章为作者原创,若要转载请获得作者同意。尊重版权,从你我做起! https://blog.csdn.net/qq_37768971/article/details/88257900
一、链表且不定义虚拟头结点的解法:
package IMUHERO;
class Solution {
public ListNode removeElements(ListNode head, int val) {
//当头结点不为空,且头结点的val与输入一致时(用于删除头结点,特殊处理):
while (head.val==val && head!=null){ //注意不能颠倒与的前后内容,系统会报错,具体原因还没解决(可能是系统bug)
ListNode delNode =head;
head=head.next;
delNode.next=null;
}
//当整个链表为空:
if (head==null)
return head;
//用于删除中间节点
ListNode prev=head;
while (prev.next!=null){
if (prev.next.val==val){
ListNode delNode=prev.next;
prev.next=delNode.next;
delNode.next=null;
}
else
prev=prev.next;
}
return head;
}
}
二、定义头结点——精简if操作:
package IMUHERO;
class Solution2 {
public ListNode removeElements(ListNode head, int val) {
ListNode dummyhead =new ListNode(1);
dummyhead.next=head;
ListNode prev=dummyhead;
while (prev.next!=null){
if (prev.next.val==val){
ListNode delNode=prev.next;
prev.next=delNode.next;
delNode.next=null;
}else prev=prev.next;
}
return dummyhead.next;
}
}
三、使用递归算法:最精简
package IMUHERO;
class Solution3 {
public ListNode removeElements(ListNode head, int val) {
if (head==null)return head;
head.next=removeElements(head.next,val);
if (head.val==val) {
return head=head.next;
}else
return head;
//也可以:return head.val==val?head.next:head;
}
}
四:提交结果
成功
显示详情
执行用时: 7 ms, 在Remove Linked List Elements的Java提交中击败了60.14% 的用户
内存消耗: 44.2 MB, 在Remove Linked List Elements的Java提交中击败了0.88% 的用户
进行下一个挑战: