题解 | 删除有序链表中重复的元素-I
删除有序链表中重复的元素-I
https://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79
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 null; } ListNode cur = head; ListNode m; // 1111233 while(cur!=null&& cur.next!=null){ while(cur.next!=null && cur.val==cur.next.val){ m = cur.next.next; cur.next = m; } System.out.print(cur.val); cur = cur.next; } return head; } }
这是正确的代码,之前出现了一个小问题,是一直用一个next_node 保存cur的下一节点,但是在内层会更新next_node,在外层也会却没有更新next_node。下面是正确的代码。
总计一下:上面的代码没有只用next_node,明显上面的代码要简洁很多,而且也不容易出错。因此,后面写算法的时候能少用节点就少用节点。
同时在用一个节点时,nextnode是cur的下一个节点,在任何情况下,更新cur都要去更新nextnode,特别是在外层循环,不要忽略了。
在cur不为空的情况下,才能访问cur的next和cur.next.val 一定要记住了
对于需要删除的节点,无需将其next再设置为空。
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 null; } ListNode cur = head; ListNode next_node = head.next; ListNode m; // 1111233 while(cur!=null&& next_node!=null){ while(next_node!=null && cur.val==next_node.val){ m = next_node.next; cur.next = m; next_node = cur.next; } cur = cur.next; if (cur!=null){ next_node = cur.next; } } return head; } }