题目:
在一个排序(保证重复节点连在一块)的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。如 输入链表:1->2->3->3->4->4->5 ,处理后为:1->2->5
解析 :
要想删除重复节点有两个关键点需要解决:
- 确定新的头结点。因为对于原链表来说,头结点可能是重复节点,所以也可能会被删除
- 如何保证删除重复节点以后,仍然保证链表保持连接,而不会断开。
思路:
几个关键变量:
1. cur:指向当前遍历到的节点
2. pre:指向最近一个不重复节点,也就是已经选取出来的不含有重复节点的链表的尾节点(注意pre不是指向cur 的前一个节点)。当还未发现不重复节点时,pre = null。pre 是保持链表连读的关键,pre式中与剩余链表保持连接
3. next:指向cur的下一个节点
4. head:表示可能的头结点。因为当pre = null时,表示还未发现不重复的节点,head指向的是可能的都节点,一旦pre != null,则head的值即为不含有重复节点的链表的头结点。
过程:
初始时,head指向原链表的头结点,pre = null。
步骤1:遍历链表,当前遍历节点为cur,next指向下一个节点,如果节点cur的值与n