题目描述
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为1→1→2,返回1→2
给出的链表为1→1→2→3→3,返回1→2→3.
以下是本篇文章正文内容,下面案例可供参考
解题思路
- 定义一个新的链表用来放删除后的链表
- 定义
cur
为当前结点,因为是有序链表,相同的值都连在一起,若此结点的值与下个结点的值相同,则让其往后跑,直到不相同时,将其保存到新的链表中,以此循环,最后返回新链表 - 注意,为了防止出现空指针异常,判断条件中除了判断相等外,还应该加上
cur.next!=null
代码如下
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head) {
// write code here
ListNode newHead = new ListNode(0);
ListNode tmp = newHead;
ListNode cur = head;
while(cur!=null){
if(cur.next!=null&&cur.val == cur.next.val){
cur = cur.next;
}
else{
tmp.next = cur;
tmp = tmp.next;
cur = cur.next;
}
}
return newHead.next;
}
}
总结
此题主要是链表的删除操作,细心注意判断条件!
如果本文对你有所帮助,要记得点赞评论哦~
若是有描述不准确的地方,欢迎大家评论区指正,一起学习~