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) { ListNode cur = head; // 循环条件: cur或者cur.next只要有一个不成立,说明不用再进行去重 // 为什么要判断两个条件同时成立,因为if语句判断cur.val和cur.next.val 而null.val是没有意义的 while(cur != null && cur.next != null) { // 如果相等 走两步 if(cur.val == cur.next.val) { cur.next = cur.next.next; } else { // 如果不相等走一步 cur = cur.next; } } // 返回头结点即可 return head; } }
本题知识点:
1.链表的遍历
2.掌握链表遍历的循环条件,为什么要cur.next和cur!=null
3.掌握链表前驱结点和后继结点的连接
本题解题思路:
1.循环条件: cur或者cur.next只要有一个不成立,说明不用再进行去重
2.为什么要判断两个条件同时成立,因为if语句判断cur.val和cur.next.val 而null.val是没有意义的
3.如果相等 走两步
4.如果不相等走一步
5.返回头结点