今天是LeetCode 简单第16道题,以此作为练习记录,欢迎交流。文中也会给出所参考的文章链接,感谢前辈们的总结。 (手动比心ღ( ´・ᴗ・` ))
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2 输出: 1->2 示例 2:
输入: 1->1->2->3->3 输出: 1->2->3
思路1: python中有个什么函数,可以直接去除重复元素。对吗?
思路2: 根据链表的原理:
判断链表是否为空,为空返回None 判断当前元素的下一个元素是否为空: (不为空)判断当前元素 是否等于 当前元素的下一个元素: (True)将当前元素的指针指向当前元素的下一个元素的下一个元素的指针。 (false)当前元素向后移动一个 返回最后得到的链表
class Solution: def deleteDuplicates(self, head: ListNode) -> ListNode: """ :type head: ListNode :rtype: ListNode """ if not head: return None cur_List = head while cur_List.next: if cur_List.val == cur_List.next.val: #当前节点的值 === 下一个节点的值 cur_List.next = cur_List.next.next # cur_list.next是指针吗 else: cur_List = cur_List.next return head在LeetCode 成功提交;但在pycharm上报错:list对象没有next。??? 为什么LeetCode上没有报这个错误??
疑问:
while cur_list.next: 此处的cur_list.next是指什么? cur_list 是当前节点;cur_list.next是当前节点的下一个节点
cur_lsit.val是指cur_list的值。那么cur_list是节点吗?当前节点可以这样理解吗 cur_list.next当前节点的指针。
错误:
while p.next 不是 while p: 因为 if 判断中 有 p.next ,要保证 p.next 不是NULLreturn head head 是链表的地址;head 是不动的; cur_list指针在移动; 注意以上代码不能通过。 少了对于特殊情况的判断。
if not head: return head