题目
1- 思路
- 模式识别1:已排序链表 ——> 判重逻辑 ,涉及到 while
2- 实现
⭐82. 删除排序链表中的重复元素 II——题解思路
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/92ba1a47c7d049709f298a4483dff8eb.png)
class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode dummyHead = new ListNode(-1);
dummyHead.next = head;
ListNode cur = dummyHead;
while(cur.next!=null && cur.next.next!=null){
if(cur.next.val==cur.next.next.val){
int x = cur.next.val;
while(cur.next!=null && x == cur.next.val){
cur.next = cur.next.next;
}
}else{
cur = cur.next;
}
}
return dummyHead.next;
}
}
3- ACM 实现
public class removeDuplicate {
static class ListNode{
int val;
ListNode next;
ListNode(){}
ListNode(int x){
val = x;
}
}
public static ListNode removeDuplicate(ListNode head){
ListNode dummyHead = new ListNode(-1);
dummyHead.next = head;
ListNode cur = dummyHead;
while(cur.next!=null && cur.next.next!=null){
if(cur.next.val==cur.next.next.val){
int x = cur.next.val;
while(cur.next!=null && cur.next.val == x){
cur.next = cur.next.next;
}
}else{
cur = cur.next;
}
}
return dummyHead.next;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入链表长度");
int n = sc.nextInt();
ListNode head = null,tail = null;
System.out.println("输入链表元素");
for(int i = 0 ; i < n;i++){
ListNode newNode = new ListNode(sc.nextInt());
if(head==null){
head = newNode;
tail = newNode;
}else{
tail.next = newNode;
tail = newNode;
}
}
ListNode res = removeDuplicate(head);
while(res!=null){
System.out.print(res.val+" ");
res = res.next;
}
}
}