知识点
链表,循环
解题思路
要删除所有重复的节点,因为链表已经非降序排好序了,我们只需要遍历链表,将重复的节点删除。
定义一个curr表示循环中的当前节点,next表示循环中的下一个节点。
当next.val等于curr.val时表示节点重复,删除next节点,next再次指向下一个节点。
否则curr和next都向后移动一位。
需要注意的是,head节点可能为空,就没有next节点了,head为空就直接返回head。
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) { // write code here if(head == null) return head; ListNode ans = head; //定义ans指向头结点,之后直接返回 ListNode curr = head; //循环中的当前结点 ListNode next = curr.next; //循环中的下一个结点 while(next != null) { //下一个结点不为空循环继续 if(next.val == curr.val){ curr.next = next.next; //删除重复的结点 } else{ curr = next; } next = next.next; } return ans; } }