美文网首页
leetcode-203

leetcode-203

作者: dev晴天 | 来源:发表于2019-02-15 14:37 被阅读0次

题目:

203. Remove Linked List Elements

Remove all elements from a linked list of integers that have value val.

Example:

Input:  1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        // 编写解决思路
    }
}

解题:

/**
     * 1 使用头结点解决
     */
    public ListNode removeElements_1(ListNode head, int val) {
        /*
         * 使用头结点
         * 1 判断头部(没有上一节点)
         * 2 中间(先找待删除节点上一节点)
         * */

        // 1 首先判断首个元素是否为目标元素
        //  有可能删除过第一个元素后,后面元素还是这个元素  故使用while
        while (head != null && head.val == val) {
            ListNode delNode = head;
            head = head.next;
            delNode.next = null;
        }
        // 2 有可能整个链表都是次元素
        if (head == null) {
            return head;//return空一样
        }
        //3 中间处理
        ListNode prev = head;
        while (prev.next != null) {
            if (prev.next.val == val) {
                ListNode delNode = prev.next;
                prev.next = prev.next.next;
                delNode.next = null;
            } else {
                prev = prev.next;
            }
        }
        return head;
    }

    /**
     * 2 使用虚拟头结点
     */
    public ListNode removeElements_2(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 = prev.next.next;
                delNode.next = null;
            } else {
                prev = prev.next;
            }
        }
        return dummyHead.next;
    }

相关文章

网友评论

      本文标题:leetcode-203

      本文链接:https://www.haomeiwen.com/subject/ugnpeqtx.html