首页 > 试题广场 >

从单向链表中删除指定值的节点

[编程题]从单向链表中删除指定值的节点
  • 热度指数:131850 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。

链表的值不能重复。

构造过程,例如输入一行数据为:
6 2 1 2 3 2 5 1 4 5 7 2 2
则第一个参数6表示输入总共6个节点,第二个参数2表示头节点值为2,剩下的2个一组表示第2个节点值后面插入第1个节点值,为以下表示:
1 2 表示为
2->1
链表为2->1

3 2表示为
2->3
链表为2->3->1

5 1表示为
1->5
链表为2->3->1->5

4 5表示为
5->4
链表为2->3->1->5->4

7 2表示为
2->7
链表为2->7->3->1->5->4

最后的链表的顺序为 2 7 3 1 5 4

最后一个参数为2,表示要删掉节点为2的值

删除 结点 2

则结果为 7 3 1 5 4

数据范围:链表长度满足 ,节点中的值满足

测试用例保证输入合法



输入描述:
输入一行,有以下4个部分:

1 输入链表结点个数
2 输入头结点的值
3 按照格式插入各个结点
4 输入要删除的结点的值



输出描述:
输出一行

输出删除结点后的序列,每个数后都要加空格

示例1

输入

5 2 3 2 4 3 5 2 1 4 3

输出

2 5 4 1

说明

形成的链表为2->5->3->4->1
删掉节点3,返回的就是2->5->4->1  
示例2

输入

6 2 1 2 3 2 5 1 4 5 7 2 2

输出

7 3 1 5 4

说明

如题  
const readline = require('readline');

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let str;
rl.on('line', function (line) {
    str = line;
}).on("close",()=>{
    let list = str.split(" ");
    const [len, firstNode, ...arr] = list;
    let head = Number(firstNode);
    let deletePoint = Number(arr.pop());

    let res = [];
    res.push(head); 

    for(let i = 0; i < arr.length; i += 2){
        let value = arr[i];
        let parentNode = arr[i+1];
        let index = res.indexOf(Number(parentNode));
        if(index  > -1){
            res.splice(index + 1, 0, Number(value));
        }
    }
    
    let deleteIndex = res.indexOf(deletePoint);
    if(deleteIndex > -1){
        res.splice(deleteIndex, 1);
    }
    console.log(res.join(" "));
});

发表于 2022-11-28 23:30:03 回复(0)
let [total,head,...arr] = readline().split(' ');
let remove = arr.pop(),link = [head];
while(arr.length){
    let [tail,head,...rest] = arr;
    arr = rest;
    let index = link.indexOf(head);
    link.splice(index+1,0,tail);
}
let i = link.indexOf(remove);
link.splice(i,1);
console.log(link.join(' '))

发表于 2022-08-08 00:41:54 回复(0)
let line = readline();
const [ num, head, ...tail ] = line.split(' '); // 数组解构得到节点数量,头结点值,以及target
const target = tail.pop();

// 按照规则创建链表(数组)返回创建完成的数组
function createLinkNode(head, tail, num) {
  let list = [head];
  for (let i = 0, len = tail.length; i < len; i += 2) {
    let targetNode = tail[i];
    let frontNode = tail[i + 1]; 
    let idx = list.indexOf(frontNode);
    list.splice(idx + 1,0 , targetNode);
  }
  return list;
}

// 删除指定节点
function deleteTargetNode(list, target) {
 let index = list.indexOf(target);
  list.splice(index, 1);
  return list
}

 let linkList = createLinkNode(head, tail, num);


console.log(deleteTargetNode(linkList, target).join(' '));

发表于 2021-10-08 15:12:41 回复(1)