删除排序链表中重复的元素

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。

示例 1:

输入: 1->2->3->3->4->4->5
输出: 1->2->5

示例 2:

输入: 1->1->1->2->3
输出: 2->3
 1 public ListNode deleteDuplicates(ListNode head) {
 2         // 初始化辅助节点
 3         ListNode listNode = new ListNode(0);
 4         listNode.next = head;
 5         // 初始化辅助节点指针
 6         ListNode currentNode = listNode;
 7         // 通过移动当前指针 currrentNode 来循环遍历链表
 8         while(currentNode.next != null && currentNode.next.next != null) {
 9             // 判断当前节点的下一个节点(真实链表的头节点)的值与下下个节点的值是否相同
10             if(currentNode.next.val == currentNode.next.next.val) {
11                 // 初始化待删节点,即将重复的节点视为单独的一个链表
12                 // 有重复就将指向待删节点的指针往后移,直到指向待删链表的最后一个节点
13                 ListNode tempNode = currentNode.next;
14                 while(tempNode != null && tempNode.next != null && tempNode.val == tempNode.next.val) {
15                     tempNode = tempNode.next;
16                 }
17                 // 将待删接节点的前节点指针指向 tempNode 的后一个节点,即可实现删除所有重复节点
18                 currentNode.next = tempNode.next;
19             }else {
20                 // 继续移动当前节点指针,进入下一个循环来继续判断链表中是否有相邻重复的节点
21                 currentNode = currentNode.next;
22             }
23         }
24         // 返回真实链表的头节点
25         return listNode.next;
26     }

 

posted @ 2020-08-20 14:56  王余阳  阅读(235)  评论(0)    收藏  举报