前言
今天的这道题《删除排序链表中的重复元素》,难度处于简单层次,主要考察的是对链表数据结构的理解以及如何操作链表。
算法题:删除排序链表中的重复元素
删除链表中的重复元素这道题,从题目标题就给出了两个关键信息,第一是链表结构,第二就是排序按照升序排列。
通过这两个信息,就基本可以解决这道题。
我的思路呢,主要还是通过中间变量来实现链表的拼接的。
首先声明一个结果链表,再通过循环体内的数字判断来进行拼接。
在循环体内,每次获取到和上一次的历史值不同时,就将当前值存入result结果链表中。
最后得出一个结果链表,打印出来验证一下就可以了。
代码展示
因为leetcode上面的示例并没有转化链表的方法,所以我就自己写了一个,大家可以自用自取。
public class Solution { private static ListNode covert(int[] nums){ ListNode result = new ListNode(); ListNode z = result; for (int i = 0; i < nums.length; i++){ z.val = nums[i]; if(i != nums.length - 1){ z.next = new ListNode(); z = z.next; } } return result; } public static void main(String[] args) { Solution solution = new Solution(); int[] l1 = {1}; // int[] l1 = {1,1,2,3,3}; ListNode result = solution.deleteDuplicates(covert(l1)); while (true){ System.out.println(result.val); if(result.next == null){ break; }else{ result = result.next; } } } public ListNode deleteDuplicates(ListNode head) { if(head == null){ return null; } ListNode result = new ListNode(); result.val = head.val; ListNode z = result; ListNode oldListNode = head.next; int old = head.val; while (true){ if(oldListNode == null){ break; } if(oldListNode.val != old){ z.next = new ListNode(); z.next.val = oldListNode.val; z = z.next; } if(oldListNode.next == null){ break; } old = oldListNode.val; oldListNode = oldListNode.next; } return result; } }
执行结果展示:
由于前两次没有考虑到原始链表为空,和原始链表长度为1的情况,提交错了两次,可惜。
总结
这道题的学习点在于数据结构的链表的理解和使用。