【问题标题】:Removing all the values in the linked list equal to a given value删除链表中等于给定值的所有值
【发布时间】:2016-07-14 11:46:07
【问题描述】:

你能解释一下为什么我的代码不总是删除链表中等于方法参数中给定值的所有值吗?我应该如何解决它?它通过了 97% 的测试用例。我更喜欢解决这个问题,而不是使用 prev/next/dummy 指针更改整个方法。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    /**
     * @param head a ListNode
     * @param val an integer
     * @return a ListNode
     */
    public ListNode removeElements(ListNode head, int val) {
        while (head!=null && head.val==val){
                head = head.next;
        }
        ListNode tmp=head;

        while (tmp!=null) {
                if (tmp.next!=null && tmp.next.val== val ) {
                    tmp.next=tmp.next.next;
                }
            tmp=tmp.next;
        }
        if (tmp != null) {
            if (tmp.val == val) {
                tmp = tmp.next;
            }
        }
        return head;
    }
}

它没有通过这个测试用例:

Input
5->6->6->null, 6
Output
5->6->null
Expected
5->null

这里是the problem 的更多详细信息: Given 1->2->3->3->4->5->3, val = 3, you should return the list as 1->2->4->5

【问题讨论】:

  • 您是否尝试过使用调试器查看您的代码会发生什么?
  • 我有,问题是不知道如何在不使用 prev 指针的情况下解决这个问题,但我也想用我正在处理的相同代码来解决这个问题!我知道如果要删除的项目相邻,我的代码将不起作用

标签: java algorithm data-structures linked-list singly-linked-list


【解决方案1】:

我认为这也有效:

while (tmp!=null) {
     if (tmp.next!=null && tmp.next.val== val ) {
         tmp.next=tmp.next.next;
      }
      else tmp=tmp.next;
 }

http://code.geeksforgeeks.org/K5yVzm

【讨论】:

    【解决方案2】:

    在你的内部 while 循环中,更改:

    if (tmp.next!=null && tmp.next.val== val ) {
         tmp.next=tmp.next.next;
    }
    

    while (tmp.next!=null && tmp.next.val== val ) {
         tmp.next=tmp.next.next;
    }
    

    您的版本将跳过要删除的每对连续值中的第二个。 你做什么:

    5->6->6->空

    -tmp: 5 -> 删除前 6 个,然后将 tmp 设置为第二个 6

    -tmp: 6, tmp.next: null -> 完成(剩下一个 6)

    【讨论】:

    • 我印象深刻!谢谢! :)
    猜你喜欢
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2011-11-28
    相关资源
    最近更新 更多