83. 删除排序链表中的重复元素 解题思路
解题思路
当前值与下一个节点的值比较,所以当前节点不需要改变(下一个节点不能为空);当相同时,当前节点的下一个节点跳过一个节点;当不同时,当前节点后移。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) { return head; }
ListNode node = head;
while (node.next != null) {
if (node.next.val == node.val) {
node.next = node.next.next;
} else {
node = node.next;
}
}
return head;
}
}
测试用例
public void test() {
int arr1[] = {1, 1, 2};
test(arr1);
int arr2[] = {1, 1, 2, 3, 3, 5, 5};
test(arr2);
int arr3[] = {1, 1, 2, 2, 2, 2, 3, 4, 4, 5, 5};
test(arr3);
test(null);
}
public void test(int arr[]) {
ListNode head = new ListNode(arr);
System.out.println("组合完成:" + head == null ? "【null】" : head.toLinkedString());
ListNode newhead = deleteDuplicates(head);
System.out.println("删除重复:" + newhead == null ? "【null】" : newhead.toLinkedString());
System.out.println("-----------");
}
网友评论