牛客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;
}
相关推荐
爱读书的小胖9 小时前
80. 删除有序数组中的重复项 II
java·数据结构·算法
臻选云栗子10 小时前
PCDN跑不起来?先别甩锅给平台,问题可能出在这
算法·程序员
小画家~10 小时前
vue3 里面的 itemList.reduce
前端·数据结构·算法
tryxr10 小时前
索引概念和索引底层数据结构
数据结构·索引
All for pursuit.11 小时前
【完结】LeetCodeHot100题 详细解题过程及代码汇总
数据结构·c++·算法·leetcode
mmmmath_311 小时前
LeetCode.101.对称二叉树
数据结构·leetcode
Logic10111 小时前
C语言/数据结构位运算题解:异或XOR找出数轴移动中只出现一次的指令——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
重生之小比特11 小时前
【算法拾光】双指针|移动零 + 复写零
数据结构·c++·算法
梦帮科技11 小时前
Linux 内存取证学与 Rootkit 猎杀——Volatility 核心剖析与内核隐藏模块逆向清除
linux·运维·服务器·神经网络·算法·网络安全
广州智造12 小时前
Radioss二次开发需要准备什么?
人工智能·算法·机器学习·cad·cae