牛客NC278 删除链表中重复的结点【中等 链表 Java,Go,PHP】

题目

题目链接:

https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef

这题有一次面试某团的第一道题

思考

复制代码
链表的基本操作

参考答案Java

java 复制代码
import java.util.*;
/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public ListNode deleteDuplication(ListNode pHead) {
        //map统计重复节点
        Map<Integer, Integer> cnt = new HashMap<>();
        ListNode cur = pHead;

        while (cur != null) {
            int k = cur.val;
            if (!cnt.containsKey(k))
                cnt.put(k, 0);

            cnt.put(k, cnt.get(k) + 1);

            cur = cur.next;
        }


        ListNode newNode = new ListNode(-1);
        ListNode tmp = newNode;
        cur = pHead;

        while (cur != null) {
            int k = cur.val;
            ListNode next = cur.next;
            if (cnt.get(k) == 1) {
                cur.next = null;
                tmp.next = cur;
                tmp = cur;
            }

            cur = next;
        }

        return newNode.next;
    }
}

参考答案Go

go 复制代码
package main

import . "nc_tools"

/*
 * type ListNode struct{
 *   Val int
 *   Next *ListNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * @param pHead ListNode类
 * @return ListNode类
 */
func deleteDuplication(pHead *ListNode) *ListNode {
	//map统计节点
	cnt := map[int]int{}
	cur := pHead

	for cur != nil {
		_, ok := cnt[cur.Val]
		if !ok {
			cnt[cur.Val] = 0
		}

		cnt[cur.Val] = cnt[cur.Val] + 1
		cur = cur.Next
	}

	newNode := &ListNode{-1, nil}
	tmp := newNode

	cur = pHead
	for cur != nil {
		k := cur.Val
		next := cur.Next

		if cnt[k] == 1 {
			cur.Next = nil
			tmp.Next = cur
			tmp = cur
		}

		cur = next
	}

	return newNode.Next
}

参考答案PHP

php 复制代码
<?php

/*class ListNode{
    var $val;
    var $next = NULL;
    function __construct($x){
        $this->val = $x;
    }
}*/

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 * 
 * @param pHead ListNode类 
 * @return ListNode类
 */
function deleteDuplication( $pHead )
{
   //map统计次数
    $cnt = array();

    $cur =$pHead;
    while ($cur!=null){
        $k = $cur->val;
        if(!isset($cnt[$k])){
            $cnt[$k] = 0;
        }

        $cnt[$k]+=1;

        $cur = $cur->next;
    }


    $newNode = new ListNode(-1);
    $tmp = $newNode;
    $cur = $pHead;
    while ($cur!=null){
        $k = $cur->val;
        $next = $cur->next;
        if($cnt[$k] ==1){
            $cur->next = null;
            $tmp->next = $cur;
            $tmp=$cur;
        }
        $cur = $next;
    }

    return $newNode->next;
}
相关推荐
syagain_zsx15 分钟前
算法基础篇 · 04 前缀和(C++ 题解)
c++·算法·前缀和
Logic10123 分钟前
C语言/数据结构滑动窗口题解:替换k个字符后的最长连续相同字符子串(LeetCode 424)
c语言·数据结构·字符串·滑动窗口·时间复杂度·频率统计·算法题
程序员阿鹏2 小时前
简单介绍一下软引用
java·开发语言·jvm·数据结构·后端
青山是哪个青山2 小时前
LeetCode 123:买卖股票的最佳时机 III
算法
Zane19942 小时前
写对二分查找有多难?Java集合框架的作者也曾栽在一行mid计算上
算法
Lokey8682 小时前
transformer结构
算法
罗斯8392 小时前
EMBER恶意软件基准数据集
人工智能·算法·安全·网络安全
0+1112 小时前
算法 --二分查找
c++·算法·leetcode
Omics Pro3 小时前
新型条件传输模型!虚拟细胞扰动预测
数据库·人工智能·算法·机器学习·自然语言处理
爱奥尼欧3 小时前
【C++】map、set 的底层是什么?红黑树五条性质、插入旋转到模拟实现
开发语言·数据结构·c++