1. 程式人生 > >【LeetCode】刪除連結串列中的節點

【LeetCode】刪除連結串列中的節點

題目:

刪除連結串列中等於給定值 val 的所有節點。

示例:

輸入: 1->2->6->3->4->5->6, val = 6 輸出: 1->2->3->4->5

對連結串列熟悉的話,這道題相對簡單一些。 程式碼(下面是解題的兩種方法):

//在leetcode提交時候無需提交這個類
public class ListNode {

    public int val;
    public ListNode next;

    public ListNode(int x) {
        val = x;
    }
}

方法一:

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
head; //刪除ListNode出現的val 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);
        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;
    }
}