LeetCode 203
两种方式:
package com.lt.datastructure.LinkedList; /** * leetCode 203题 * /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } * 第一种:不使用虚拟头结点 * 首先考虑头结点,头结点为空,返回null,如果头结点不为空,其值为val,删除头结点。 * 然后考虑非头结点,遍历链表,如果找到,删除 */ class Solution { public ListNode removeElements(ListNode head, int val) { //如果头结点不为空,其值为val,删除头结点 while(head != null && head.val == val){ ListNode delNode = head; head = head.next; delNode.next = null; } if(head==null) return null; //考虑非头结点,遍历链表,如果找到,删除 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; } /** * 第二种:使用虚拟头结点 */ class Solution2 { public ListNode removeElements(ListNode head, int val) { //使用虚拟头结点简化第一种方式的代码 ListNode dummyhead = new ListNode(-1); //指向head头结点 dummyhead.next = head; ListNode prev = dummyhead; while(prev.next!=null){ if(prev.next.val == val){ prev.next = prev.next.next; }else{ prev = prev.next; } } return dummyhead.next; } } }