Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.
题意:给定一个排序后链表(升序),删除所有值相同的节点(注意是删除所有重复的节点)。
题解:这里首先创建一个新的表头,再通过逐次比较原链表的值,把不重复的值加入新链表的尾端即可,难点还是在边界条件的判断上,极容易产生NullPointerExpection错误。代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode res=new ListNode(0);
ListNode r=res;
ListNode temp=head;
while(temp!=null&&temp.next!=null)
{
if(temp.val==temp.next.val)
{
int m=temp.val;
while(temp!=null&&temp.val==m)//时时要判断该节点是否为null啊!!!链表里最容易出错的地方
temp=temp.next;
}
else
{
r.next=temp;
temp=temp.next;
r=r.next;
r.next=null;//断开链,这里很重要!!
}
}
if(temp!=null&&temp.next==null) r.next=temp;
return res.next;
}
}