力扣第83题:删除排序链表中的的重复元素
1.给定一个已排序的链表的头head,删除所有的重复元素,使得每个元素只出现一次。
示例:
2.首先我们需要定义好ListNode链表类:
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
3.思路分析
首先我们需要定义一个cur链表指针,用于对链表的遍历,为什么需要定义一个cur,而不是直接用链表的头结点head进行操作呢?在链表的操作中,链表头是一定要固定的,而指针cur是不断在移动,就相当于你站着不动,然后让另外一个人来对你进行搜身检查,因此如果头结点head移动了,那么链表就会找不到链表的起始位置。详细解释自己补数据结构,这是数据结构的基础知识哟
4.代码部分
public ListNode deleteDuplicates(ListNode head) {
//如果头结点为空,那么我们直接返回就可以了,根本不需要遍历
if (head == null) {
return head;
}
//定义cur指针,来对链表进行遍历
ListNode cur = head;
//注意,在对结点进行遍历前,一定要对结点进行判断是否为空,如果到了链表末尾,那么cur.next就是为null的,如果继续操作的话程序就会出现错误
while (cur.next != null) {
//如果当前结点的值等于下一个结点的值
if (cur.val == cur.next.val) {
//将当前结点指向下下一个结点(cur.next.next),也就是跳过了cur.next结点!!
cur.next = cur.next.next;
} else {
//如果不同,那么当前结点就指向下一个结点即可
cur = cur.next;
}
}
//完成上面遍历后直接返回头结点就可以啦
return head;
}