牛客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;
}
相关推荐
Wendy14417 小时前
【线性回归(最小二乘法MSE)】——机器学习
算法·机器学习·线性回归
拾光拾趣录7 小时前
括号生成算法
前端·算法
渣呵8 小时前
求不重叠区间总和最大值
算法
拾光拾趣录8 小时前
链表合并:双指针与递归
前端·javascript·算法
好易学·数据结构8 小时前
可视化图解算法56:岛屿数量
数据结构·算法·leetcode·力扣·回溯·牛客网
香蕉可乐荷包蛋10 小时前
AI算法之图像识别与分类
人工智能·学习·算法
chuxinweihui10 小时前
stack,queue,priority_queue的模拟实现及常用接口
算法
tomato0910 小时前
河南萌新联赛2025第(一)场:河南工业大学(补题)
c++·算法
墨染点香10 小时前
LeetCode Hot100【5. 最长回文子串】
算法·leetcode·职场和发展
甄卷11 小时前
李沐动手学深度学习Pytorch-v2笔记【08线性回归+基础优化算法】2
pytorch·深度学习·算法