83.删除排序连表中的重复元素
解题思路:
package leadcode;
import leadcode.lib.ListNode;
import leadcode.lib.ListNodeInit;
/**
* @author : icehill
* @description : 删除排序连表中的重复元素
* 存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次
* 返回同样按升序排列的结果链表。
* 示例 1:
* 输入:head = [1,1,2]
* 输出:[1,2]
* 示例 2:
* 输入:head = [1,1,2,3,3]
* 输出:[1,2,3]
* 提示:
* 链表中节点数目在范围 [0, 300] 内
* -100 <= Node.val <= 100
* 题目数据保证链表已经按升序排列
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
* 解题思路:
* 简单题,考链表的操作,只需要遍历链表,如果当前节点的值current.val跟下个节点的值current.next.val一致,
* 则把下个节点指向下下个节点,current.next=current.next.next(相当于删除current.next)
* 最后返回头结点
* 时间复杂度:O(n) 空间复杂度:O(1)
* @date : 2021-05-14
*/
public class Solution83 {
public static void main(String[] args) {
int[] array1 = {1, 1, 2, 3, 3};
//数组转换成链表来测试
ListNode head1 = ListNodeInit.initWhiteArray(array1);
Solution83 solution83 = new Solution83();
ListNode newHead1 = solution83.deleteDuplicates(head1);
System.out.println(ListNodeInit.changeToList(newHead1));
}
public ListNode deleteDuplicates(ListNode head) {
//定义返回的头结点
ListNode newHead = head;
//遍历链表,检查head.val跟head.next.val是否一致
while (head != null && head.next != null) {
if (head.val == head.next.val) {
head.next = head.next.next;
} else {
head = head.next;
}
}
return newHead;
}
}