题目的链接在这里:https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef
题目大意
描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5一、示意图
二、解题思路
暴力
暴力
代码如下:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
import java.util.ArrayList;
import java.util.List;
public class Solution {
public ListNode deleteDuplication(ListNode pHead) {
//进行边界判断
if(pHead==null)
return pHead;
ListNode res=pHead;
//还有一招 进行两次遍历 把第一次先删除后面一个 然后把重复的值存在第一个数组中 然后再第二次遍历遍历的时候进行删除
ListNode tempNode=pHead;
pHead=pHead.next;
List<Integer> list=new ArrayList<>();
while (pHead!=null){
if(tempNode.val!=pHead.val){
//那就说明这两个无事发生
//进行更新
tempNode=pHead;
pHead=pHead.next;
}
else{
//说明这两个值相同
//先存到list中
list.add(tempNode.val);
//然后进行删除
tempNode.next=pHead.next;
pHead=pHead.next;
}
}
//如果全是1的话 那就是返回{1}
//这里就是第一次删除的结果了 先进行测试 现在输出是12345 然后再进行一遍
//首先排除头元素
while (res!=null){
if(list.contains(res.val)){
//删除头节点
res=res.next;
}
else{
break;
}
}
if(res==null)
return res;
tempNode=res;
pHead=tempNode.next;
//然后再进行判断
while (pHead!=null){
//就是判断这个值在不在对应的容器中
if(list.contains(pHead.val)){
//说明这个点也是需要删除的
tempNode.next=pHead.next;
pHead=pHead.next;
}
else{
//说明不需要删除
tempNode=pHead;
pHead=pHead.next;
}
}
return res;
}
}