问题描述:
给定一个排序链表,删除所有重复的元素每个元素只留下一个。
样例:
给出 1->1->2->null
,返回 1->2->null
给出 1->1->2->3->3->null
,返回 1->2->3->null
解题思路:
用两个指针节点一次往后迭代,其中一个在前边,另个在后边两个紧挨着,先固定一个动,另一个往后移知道碰到与前面数据不一样的的就将中间的全部删掉,依次往后迭代。
代码:
/*** 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
*/* @param head: The first node of linked list.* @return: head node*/* @param head: The first node of linked list.* @return: head node*/ListNode *deleteDuplicates(ListNode *head) {// write your code hereif (head== NULL) return NULL;if (head->next== NULL)return head;ListNode *p, *q;p= head;q= NULL;while (p!= NULL) {if (q!= NULL&& p->val== q->val) {q->next= p->next;p= q->next;}else {q= p;
p= p->next;}}return head;}};感想:
思路想到了但是代码具体的细节处理不好,这个程序是没法运行的(尤其是在循环开始的时候,最后结束的处理也要重点思考)。