题解 | #牛群排列去重#
考察的知识点:与链表有关的题基本都是插入,删除,交换顺序等,解决这些问题通常将链表的指针进行修改。
问题分析: 遍历链表,对于每个节点,判断其值是否有前一个节点相同,如相同则删除。 具体实现步骤如下:
-
链表长度至少为二才需处理。判断头节点为空或无后续节点,满足直接返回头节点;
-
初始化两个指针 pre 和 node 分别指向链表的头结点和当前结点。遍历链表,对于每个node节点,判断该节点的值大于前节点其的值和后节点的值:
a.若满足则pre节点值与node值相同,则将pre.next指向node.next,将node后移。
b.不满足则pre指向node,node指向node.next;
-
返回头节点。
本题解析所用的编程语言:java
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head) {
if (head == null || head.next == null) return head;
ListNode pre = head;
ListNode node = pre.next;
while (node != null) {
if (node.val == pre.val ) {
pre.next = node.next;
node = node.next;
} else {
pre = node;
node = node.next;
}
}
return head;
}
}