V1haoge

原创作品,可以转载,但是请标注出处地址: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){
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 }

 

相关文章: