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