链表有序
假设链表为1 2 2 3 3 3 4 5
思路
- 首先判断链表为空或者只有一个节点直接返回
- 原链表不动便于返回链表头,设置两个指针front、rear, front指向头节点, rear指向下一个节点
- front、rear值相等,节点摘下,摘下之前rear指向下一个节点,防止断开
再判断rear指向的节点是否还是与front值相等(3 3 3 4 4-> 3 3 4 5)
- front、rear值不等,两个指针一起往下走
代码实现如下:
import java.util.*;
public class Solution {
public ListNode deleteDuplicates (ListNode head) {
// write code here
if(head==null||head.next==null)
return head;
ListNode front = head;
ListNode rear = head.next;
while(rear != null)
{
if(front.val==rear.val)
{
rear=rear.next;
front.next = front.next.next;
}
else
{
front=front.next;
rear=rear.next;
}
}
return head;
}
}
(半小时,终于自己来写出来bug free的了)