题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
http://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
① 在链表前补0节点,使得指针(cur)指向该节点;
② 当cur.next=null时表示原链表没有节点,返回去掉表头的链表即可
② 当cur.next!=null cur.next.next=null 时表示原链表只有一个节点,返回去掉表头的链表即可
③ 当cur.next!=null cur.next.next!=null 时,进入循环遍历,比较cur.next.val与cur.next.next,val
- 若相同,则取一个中间值 temp=cur.next.val,循环遍历,删除所有重复节点,
- 若不相同,则让cur后移一位直至末尾
java代码如下:
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * } */ public class Solution { /** * * @param head ListNode类 * @return ListNode类 */ public ListNode deleteDuplicates(ListNode head) { //空链表 if(head == null){ return null; } ListNode res = new ListNode(0); //在链表前加一个表头 res.next = head; ListNode cur = res; while(cur.next != null && cur.next.next != null){ //遇到相邻两个节点值相同 if(cur.next.val == cur.next.next.val){ int temp = cur.next.val; //将所有相同的都跳过 while (cur.next != null && cur.next.val == temp) cur.next = cur.next.next; }else{ cur = cur.next; } } //返回时去掉表头 return res.next; } }