删除链表中的重复节点-18-2
删除链表中的重复节点,重复的只保留一个。
输入: 1->1->2->3->3
输出: 1->2->3
思路:
public ListNode deleteDuplicates(ListNode head) {
ListNode current = head;
while (current != null && current.next != null) {
if (current.next.val == current.val) {
current.next = current.next.next;
} else {
current = current.next;
}
}
return head;
}
删除链表中的重复节点-18-3
删除链表中的重复节点,重复的节点全部删除。
输入: 1->2->3->3->4->4->5
输出: 1->2->5
输入: 1->1->1->2->3
输出: 2->3
思路:
class Solution{
public ListNode deleteDuplication(ListNode head) {
ListNode dummy = new ListNode(); // 前一个节点
ListNode preNode = dummy; // 用来保存重复节点的前一个节点
ListNode curNode = head; // 当前节点
dummy.next = head;
while(curNode != null) {
//判断是否存在重复节点,是否应该删除
if(curNode.next != null && curNode.value == curNode.next.value) {
while(curNode.next != null && curNode.value == curNode.next.value)
curNode = curNode.next;
preNode.next = curNode.next; // 删除相应的重复节点
}
else {
preNode = curNode; // preNode 指针后移
}
curNode = curNode.next;
}
return dummy.next;
}
}