题目:
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
.
思路:遍历链表,如果当前节点和下一个节点重复,则删除下一个节点,不同则前进一个节点继续处理,直到链表结尾。
Attention: 注意判断好List里重复节点和不重复节点时如何移动的。
AC Code:
/**
* 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) {
//删除单链表里重复的节点
//删除排序链表中重复的节点,删除操作完成后,原链表中的重复节点只保留一个。
//思路,遍历链表,如果当前节点和下一个节点重复,则删除下一个节点,不同则前进一个节点继续处理,直到链表结尾。
if(head == NULL)
return head;
ListNode* tmpNode;
tmpNode = head;
while(tmpNode->next != NULL)
{
if(tmpNode->val == tmpNode->next->val)
{
ListNode* nextNode;
nextNode = tmpNode->next; //让nextNode指向重复的节点 tmpNode->next
tmpNode->next = nextNode->next;
delete nextNode;
}
else
{
tmpNode = tmpNode->next; //移动tmpNode指向下一个不重复的节点
}
}
return head;
}
};