剑指56 - 删除链表中重复的结点
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
示例1
输入
{1,2,3,3,4,4,5}
输出
{1,2,5}
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead){
if(pHead == null) return null;
List<Integer> list = new ArrayList<>();
// 上次删除的节点值
int lastDel = pHead.val - 1;
ListNode temp = pHead.next;
list.add(pHead.val);
while(temp != null) {
int tp = pHead.val - 2;
if (list.size()>0) {
tp = list.get(list.size()-1);
}
// 当前值和list的最后一个节点值相同时,删除list的最近节点,并记录删除的值
if(tp == temp.val) {
list.remove(list.size()-1);
lastDel = temp.val;
} else if(lastDel != temp.val){
// 当前值跟被删除的值不相等时,向list中添加元素值
list.add(temp.val);
}
temp = temp.next;
}
ListNode ret ;
if(list.isEmpty()) return null;
ret = new ListNode(list.get(0));
ListNode l = ret;
// 从list剩下的元素构建链表返回
for(int i=1; i<list.size(); i++) {
l.next = new ListNode(list.get(i));
l = l.next;
}
return ret;
}
}
小总结:
题目中的链表排好序