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"); } };