您的位置:首页 > 其它

Leetcode 83. 删除排序链表中的重复元素

2019-03-18 22:09 274 查看

给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

示例 1:

输入: 1->1->2
输出: 1->2

示例 2:

输入: 1->1->2->3->3
输出: 1->2->3

主要弄懂链表的操作
对于C++,主要是使用指针来操作
ListNode*cur = head; // 定义一个指向head的指针
cur->val //指向当前
cur->next //指向下一个元素

C++实现

/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
ListNode* cur = head;
while(cur != NULL){
ListNode* rear = cur->next;
if(rear == NULL)
return head;
if(cur->val == rear->val)
cur->next = rear->next;
else
cur=cur->next;
}
return head;
}
};

对于python3 ListNode 是定义的一个链表类
关键操作是
flag=head.val #取head头部的值
h = ListNode(head.val) #定义了一个ListNode的对象 就是定义了一个新的链表h
current =h #取指向h头部元素的指针

python特殊的地方在于
head = head.next 自己遍历会删掉当前头部元素 如果不想删掉,只遍历的话就要重新定义一个指针来遍历
current.next =ListNode(head.val) 在链表h中添加元素,添加的元素是head的当前头部元素,current 指向的是h

python3 实现

class Solution:
    def deleteDuplicates(self, head: ListNode) -> ListNode:
        if head == None:
            return None
        h = ListNode(head.val)
        current = h
        flag = head.val
        while head != None:
            if flag == head.val:
                head = head.next
            else:
                current.next = ListNode(head.val)
                current = current.next
                flag = head.val
                head = head.next
        return h
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: