唯一浩哥

架构之路----Java有不少事

LeetCode算法扫题系列83

原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9104582.html

LeetCode算法第83题(难度:简单)

题目:给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。(English:Given a sorted linked list, delete all duplicates such that each element appear only once.

示例 1:

输入: 1->1->2
输出: 1->2

示例 2:

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

简述实现思路:这种题目涉及到链表操作,需要对链表结构比较熟悉,去除重复元素,因为是有序链表,那么重复的元素必然是并列的,那么就简单了,一次遍历,找到与前一个元素值相同的元素,将其删除即可,实现的时候需要注意一点,这里涉及节点删除操作,我们表面上要找的是重复的值的节点,实际我们需要的是该节点的上一节点,因为删除操作需要依据上一节点来操作,如下代码中的preNode,还有一点需要注意,那就是针对链表头节点和尾节点的特殊处理,此处尾节点的处理可以归结到遍历中去,但头节点的处理需要单独列出来,所有针对链表的操作,都需要对头节点和尾节点的情况进行单独思考实现,一旦与基本节点情况不一致,必须单独处理。

Java实现源码:

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) { val = x; }
 7  * }
 8  */
 9 class Solution {
10   public ListNode deleteDuplicates(ListNode head) {
11     ListNode node = head;
12     ListNode preNode = null;//初始化上节点
13     while(node != null){
14       if(preNode == null){//说明是头节点
15         preNode = head;
16       }else{
17         if(preNode.val == node.val){//找到重复节点node,preNode为其上一节点
18           node = node.next;
19           preNode.next = node;//删除当前节点
20         }else{
21           node = node.next;
22           preNode = preNode.next;
23         }
24       }
25     }
26     return head;
27   }
28 }

 精简代码版:

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) { val = x; }
 7  * }
 8  */
 9 class Solution {
10     public ListNode deleteDuplicates(ListNode head) {
11         ListNode node = head;
12         while(node != null){
13             if(node.next == null){//末节点
14                 return head;
15             }
16             if(node.val == node.next.val){
17                 node.next = node.next.next;
18             }else{
19                 node = node.next;
20             }
21         }
22         return head;
23     }
24 }

 

posted @ 2018-05-29 13:27  唯一浩哥  阅读(425)  评论(0编辑  收藏  举报