1.删除重复的元素,保留一个
leetcode题目
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null){
return null;
}
ListNode newHead = head;
while(head.next != null){
if(head.val == head.next.val){
//遇到相等,跳过下一节点,当前结点next指向下下节点
head.next = head.next.next;
}else{
head = head.next;
}
}
return newHead;
}
}
2.删除重复元素,全部保留
leetcode题目
思路:遇到这种单链表的删除题目,并且全部删除的话,基本可以采用增加一个哨兵节点.next指向当前头结点,可以避免会把头结点也删除掉,同时再增加一个辅助指针即可
代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null){
return null;
}
ListNode preHead = new ListNode(0);
preHead.next = head;
ListNode l1 = preHead;
while(l1.next != null && l1.next.next != null){
if(l1.next.val == l1.next.next.val){
ListNode temp = l1.next;
while(temp != null && temp.next != null && temp.val == temp.next.val){
temp = temp.next;
}
//temp会指向重复元素的最后一个
l1.next = temp.next;
}else{
l1 = l1.next;
}
}
return preHead.next;
}
}