LeetCode算法题83:删除链表中的重复元素解析

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

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

示例2:

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

这个题就是考察对链表的使用,很简单的思路,设定两个指针(也可以只设定一个,两个好理解),一个指向当前链表(当前指针),另一个指向下一个链表(下一个指针),然后在下一个指针不为空的情况下一直循环:如果下一个链表元素等于当前链表元素,那么应该丢弃下一个链表,所以直接将当前链表地址指向下下一个链表即可(通过将下一个指针指向下下一个链表,然后当前链表地址等于下一个指针);如果不等,那么直接将当前指针指向下一个链表,下一个指针指向下下一个链表。(其实解释挺乱,代码更清楚一些)
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* p = head;
        if (p == NULL)
            return NULL;
        ListNode* pNext = p->next;
        while(pNext != NULL)
        {
            if (pNext->val == p->val)
            {
                pNext = pNext->next;
                p->next = pNext;
            }
            else
            {
                p = pNext;
                pNext = pNext->next;
            }
        }
        return head;
    }
};

python3源代码:

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def deleteDuplicates(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        p = head
        if p == None:
            return None
        pNext = p.next
        while pNext!=None:
            if pNext.val==p.val:
                pNext = pNext.next
                p.next = pNext
            else:
                p = pNext
                pNext = pNext.next
        return head

你可能感兴趣的:(Leetcode算法题分析)