牛客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;
}
相关推荐
二进制person4 小时前
Java SE--方法的使用
java·开发语言·算法
OneQ6664 小时前
C++讲解---创建日期类
开发语言·c++·算法
JoJo_Way4 小时前
LeetCode三数之和-js题解
javascript·算法·leetcode
.30-06Springfield5 小时前
人工智能概念之七:集成学习思想(Bagging、Boosting、Stacking)
人工智能·算法·机器学习·集成学习
凌肖战6 小时前
力扣网C语言编程题:在数组中查找目标值位置之二分查找法
c语言·算法·leetcode
weixin_478689767 小时前
十大排序算法汇总
java·算法·排序算法
luofeiju7 小时前
使用LU分解求解线性方程组
线性代数·算法
学不动CV了8 小时前
数据结构---线性表理解(一)
数据结构
SKYDROID云卓小助手8 小时前
无人设备遥控器之自动调整编码技术篇
人工智能·嵌入式硬件·算法·自动化·信号处理
ysa0510308 小时前
数论基础知识和模板
数据结构·c++·笔记·算法