题目要求
给定一个排好顺序的链表,删除链表中的重复项。
例子
Example 1:
Input: 1->1->2
Output: 1->2
Example 2:
Input: 1->1->2->3->3
Output: 1->2->3
解题思路
和解决有序数组中删除重复元素leetcode 26 有序数删除组中的重复元素的思路相似,通过遍历比较链表中相邻元素的值,若重复,则当前元素的next指向下一节点的next.
(p->next = p->next->next) 理解起来是这样
在操作中,因为要删除并释放重复节点,所以也需要一个指针(nex)来存放记录重复节点的位置,即nex = p->next。
主要代码c++
class Solution {
public:ListNode* deleteDuplicates(ListNode* head) {
ListNode *cur =head, *nex;while(cur && cur->next) // 链表为空,或者里那表末尾时结束(避免再写if判断空表){
if(cur->val == cur->next->val) // 比较相邻元素的值{
nex = cur->next;delete cur->next; //很多解答直接跳到下一节点,而不释放节点cur->next = nex->next;}else{
cur = cur->next;}}return head; }
};