算法刷题计划二----无主题随机刷题5(leetCode)

2021/9/19 22:06:20

本文主要是介绍算法刷题计划二----无主题随机刷题5(leetCode),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

02.01. 移除重复节点

编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。

示例1:

输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]

示例2:

输入:[1, 1, 1, 1, 2]
输出:[1, 2]

提示:

链表长度在[0, 20000]范围内。
链表元素在[0, 20000]范围内。
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeDuplicateNodes(ListNode head) {
        if(head==null||head.next==null)
            return head;
        ListNode p=head,q=head.next;
        Set<Integer> set=new HashSet<Integer>();
        set.add(p.val);
        while(q!=null)
        {
            if(!set.contains(q.val))
            {
                p.next=q;
                p=p.next;
                set.add(q.val);
            }
            q=q.next;    
        }
        p.next=null;
        return head;
    }
}

个人总结: 要勤练。

02.02. 返回倒数第 k 个节点

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。

注意:本题相对原题稍作改动

示例:

输入: 1->2->3->4->5 和 k = 2
输出: 4

说明:

给定的 k 保证是有效的。

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int kthToLast(ListNode head, int k) {
        ListNode p=head,q=head;
        int c=0;
        while(c<k-1)
        {
            q=q.next;
            c++;
        }
        while(q.next!=null)
        {
            p=p.next;
            q=q.next;
        }
        return p.val;
    }
}

个人总结: 下次可以尝试一下递归。



这篇关于算法刷题计划二----无主题随机刷题5(leetCode)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程