【leetcode】 Remove Duplicates from Sorted List

时间:2023-12-25 22:35:43

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.

给出一个已排序链表,删除所有重复的元素使每一个节点值只出现一次

思路:

1. 定义pCurNode,pNextNode两个节点指针;

2. pCurNode初始化为链表头节点指针;pNextNode初始化为下一节点

3. 判断pCurNode是否有效;

4. 判断相邻两个节点是否相同,如相同删除后一个相同的节点(其实就是将pCurNode的next指针指向删除节点的下一节点即可),再循环比较原来删除节点后的节点值是否相同。如(1, 1)、(1,1, 1);

5. 如相邻两个节点不同,则将当前节点指针后移一个节点;

6. 重复3、4、5;

class Solution
{
public:
ListNode* deleteDuplicates(ListNode* head)
{
ListNode* pCurNode = head;
ListNode* pNextNode = nullptr;
while (pCurNode)
{
pNextNode = pCurNode->next;
if (pNextNode&&pNextNode->val == pCurNode->val)
{
pCurNode->next = pNextNode->next;
}
else
{
pCurNode = pNextNode;
}
} return head;
} void Print(ListNode* head)
{
ListNode* pCurNode = head;
while (pCurNode)
{
printf(" %d", pCurNode->val);
pCurNode = pCurNode->next;
} printf("\n");
}
};