当时想的复杂了,乱想,想着value相同的作为子链表,遍历到子链表末尾 和 下一个value不等为分割点,实际用起来太复杂了,顾头不顾尾的。
挨个遍历不就好了!!!
思路:
-
判断前后两个值是否相等,相等:next 指向 next的next
不相等:cursor游标指向这个产生不同的节点 - 循环第一步
- 更改后的链表头结点并未改动,应该说head结点永远都可以作为去重后的链表的head
class Solution {
ListNode cursor ;
public ListNode deleteDuplicates(ListNode head) {
cursor = head;
while(cursor != null && cursor.next != null){//避免给定链表是空
if( cursor.val == cursor.next.val ){
cursor.next = cursor.next.next;//这边两个next,避免nullpointerException,while条件里至少保证到cursor.next不为空
}else{
cursor = cursor.next;
}
}
return head;
}
}