问题描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。
样例:给出 1->1->2->null,返回 1->2->null
给出 1->1->2->3->3->null,返回 1->2->3->null
实现思路:为了实现操作,我设置了两个指针变量p和q,让p指向开始结点,让q指向第二个结点,即这两个指针一前一后分别指向两个数据元素。然后重复执行下述操作:首先判断第二个结点是否是空
1.若是空,则返回头结点;
2.若不是空,再判断当前值是否等于下一个值。若是,则将当前元素的next域指向它的后继的后继;若不是,将p指针后移。
3.将q指针后移
实现代码:
* Definition of ListNode
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: The first node of linked list.
* @return: head node
*/
ListNode *deleteDuplicates(ListNode *head) {
if(head==NULL)
{return 0;}
ListNode *p,*q;
p=head;
q=head->next;
while(q!=NULL){
if(q->val==p->val)
{p->next=q->next;}
else
{p=q;}
q=p->next;}
return head;// write your code here
}
};
做题感想:这个题还是以删除链表中的元素为基础,因为这个题是删除重复的元素并保留一个,所以考虑设置两个指针进行遍历操作。
删除链表中重复元素
468

被折叠的 条评论
为什么被折叠?



