题目
1- 思路
模式识别1 :已排序链表 ——> 判重逻辑 ,涉及到 while
2- 实现
⭐82. 删除排序链表中的重复元素 II——题解思路
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;
}
}
}