开发者社区> 问答> 正文

我应该如何优化我的代码?-从排序的链表中删除重复值节点

我正在尝试解决此问题- 从排序的链表中删除重复值

我正在为某些其他测试用例工作时,某些测试用例出现运行时错误。如果有人可以提出一些有关如何优化代码的方法,那将意味着很多。

#
# For your reference:
#
# SinglyLinkedListNode:
#     int data
#     SinglyLinkedListNode next
#
#

def removeDuplicates(head):
    if head is None:
        return None
    else:

        current = head
        prev = SinglyLinkedListNode("")
        prev.next = head

        while current.next != None:

            if prev.data != current.data:
                prev = prev.next
                current = current.next
            else:

                current = current.next
                while(prev.data == current.data):
                    current = current.next
                prev.next = current
                prev = prev.next
                current = current.next

        if current.next == None:
            if prev.data != current.data:
                prev = prev.next
            else:
                prev.next = None

        return head

展开
收起
几许相思几点泪 2019-12-29 18:55:30 887 0
1 条回答
写回答
取消 提交回答
  • 我认为这部分会让您困惑:

    while(prev.data == current.data):
        current = current.next
    prev.next = current
    prev = prev.next
    current = current.next
    
    

    如果触发了循环,那么在您假设链接包含下一个项目(可能没有)之后,我可能会在此处进行检查,以防止发生这种情况。

    可能是这样的:

    while (current != None && prev.data == current.data):
        current = current.next;
    prev.next = current;
    prev = prev.next;
    
    

    实际上,我们是否真的需要紧随其后的“ current = current.next”行?并且,如果遵循以下逻辑,我们是否已经不在大while循环中进行None检查了,并且在我们在此处修复的循环结束时是否还没有prev已经是None?

    2019-12-29 18:55:57
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载