本篇博客将为大家介绍一道经典的链表问题:删除链表中的重复节点。
题目描述
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。
示例 1:
输入: 1->1->2
输出: 1->2
示例 2:
输入: 1->1->2->3->3
输出: 1->2->3
解题思路
由于链表已经排序,因此重复的节点一定是相邻的。可以使用双指针的方法遍历链表,判断相邻的节点是否相同,如果相同,则删除后面的节点。
具体实现步骤如下:
- 定义两个指针,分别指向链表的头节点和第二个节点。
- 遍历链表,如果两个指针指向的节点相同,则将后面的指针向后移动一位;如果不同,则将两个指针同时向后移动一位。
- 如果后面的指针为空,则说明链表已经遍历完毕;否则,将前面的指针的 next 指针指向后面的指针,然后将后面的指针向后移动一位。
- 重复步骤 2 和 3,直到链表遍历完毕。
代码实现
C++ 代码如下:
/**
- Definition for singly-linked list.
- struct ListNode {
-
int val;
-
ListNode *next;
-
ListNode(int x) : val(x), next(NULL) {}
- };
/
cla