在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1-2-3-3-4-4-5 处理后为 1-2-5(非常简单明了)
题目介绍
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。
题目分析
这是一个典型的链表操作,基本思路为首先查询链表,碰到前后相同的,则跳过,直到不相同,接着依次赋值即可。
源代码
/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) :val(x), next(NULL) {}
};
*/
class Solution {
public:ListNode* deleteDuplication(ListNode* pHead){if(pHead==NULL||pHead->next==NULL){return pHead;}ListNode* node=pHead;ListNode* new_node = new ListNode(0);new_node->next = NULL;//p1的轨迹记录没有重复的节点ListNode* p1=new_node;while(node){if(node->next&&node->val==node->next->val){while(node->next&&node->val==node->next->val){node=node->next;}node=node->next;new_node->next=node;}else{new_node->next=node;new_node=node;node=node->next;}}return p1->next;}
};