原题网址:
描述
给定一个排序链表,删除所有重复的元素每个元素只留下一个。
您在真实的面试中是否遇到过这个题? 是
样例
给出 1->1->2->null
,返回 1->2->null
给出 1->1->2->3->3->null
,返回 1->2->3->null
标签
链表
思路:遍历链表,如果当前节点值与下一个节点值相等,当前节点的next指向下一个节点的next;如果不相等,当前节点后移一位。
注意:循环判断条件有两个,当前节点和当前节点的next都不能为NULL;
AC代码:
/** * Definition of singly-linked-list: * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */class Solution {public: /** * @param head: head is the head of the linked list * @return: head of linked list */ ListNode * deleteDuplicates(ListNode * head) { // write your code here if (head==NULL) { return head; } ListNode *p=head; while (p!=NULL&&p->next!=NULL) { if (p->val==p->next->val) { p->next=p->next->next; } else { p=p->next; } } return head; }};
初次代码没通过,因为我在“ 如果当前节点值与下一个节点值相等,当前节点的next指向下一个节点的next ” 这个程序块中又加了一句 p=p->next; 蠢……