Q:给定一个升序链表,删除重复元素,只保留原链表中出现一次的元素
A:注意原来重复的元素都要删除不能保留,所以在遍历链表的时候所用临时节点应该是head的前一个节点,方便可能的话删除第一个节点
1.在链表前面加一个头结点preNode
2.让临时节点temp等于preNode
3.遍历链表,当temp.next和temp.next.next均不为空时:
3.1 若两个节点值相同,保留下节点值
3.2 开一个内部while循环,将所有相同的都遍历过去
4.否则,相同的话直接右移temp
5.返回preNode.next
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head) {
// write code here
ListNode preNode = new ListNode(-1);
if (head == null || head.next == null) {
return head;
}
preNode.next = head;
ListNode temp = preNode;
while (temp.next !=null && temp.next.next!=null) {
if (temp.next.val == temp.next.next.val) {
int val = temp.next.val;
while(temp.next!=null && val == temp.next.val ) {
temp.next = temp.next.next;
}
} else {
temp = temp.next;
}
}
return preNode.next;
}
}