相关标签
一、题目要求
二、题解和代码实现
1.题解
2.代码实现
代码如下(示例):
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode podo = new ListNode();//新建个首链表头
ListNode ponext = podo;//新建指针指向首链表头
ListNode pome =head;//新建指针指向头链表
while (pome!=null){//循环
// 进入循环时,确保了 head 不会与上一节点相同
if (pome.next==null || pome.val !=pome.next.val ){//当满足条件时,将元素存放在新的链表中
ponext.next = pome;
ponext = ponext.next;//新建指针一直指向新链表尾部
}
// 如果 head 与下一节点相同,跳过相同节点
while (pome.next!=null && pome.val == pome.next.val){//满足条件是,说明有下一个元素,并且元素相等
pome = pome.next;//不断循环,直到指向相同元素的最后一个
}
//如果是里循环没进去的话,那么说明新链表加了数据,所以指向原链表的指针也一样要往下指
pome = pome.next;//因为会指向最后一个相同元素,所以还要指针再指向下一个,这样才能完全去除重复元素
}
ponext.next =null;
return podo.next;
}
}