在一行上:
先输入一个整数
代表链表中节点的总数;
随后输入一个整数
代表头节点的值;
随后输入
个二元组
;
最后输入一个整数
,代表需要删除的节点值。
除此之外,保证每一个
值在输入前已经存在于链表中;每一个
值在输入前均不存在于链表中。节点的值各不相同。
在一行上输出
个整数,代表删除指定元素后剩余的链表。
5 2 3 2 4 3 5 2 1 4 3
2 5 4 1
在这个样例中,链表的构造过程如下:
头节点为
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
随后,删除值为
的节点,得到链表
。
6 2 1 2 3 2 5 1 4 5 7 2 2
7 3 1 5 4
在这个样例中,链表的构造过程如下:
头节点为
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
在
后插入
,得到链表
;
随后,删除值为
的节点,得到链表
。
本题由牛客重构过题面,您可能想要阅读原始题面,我们一并附于此处。
【以下为原始题面】
输入一个单向链表和一个节点的值,从单向链表中删除等于该值的节点,删除后如果链表中无节点则返回空指针。
链表的值不能重复。
构造过程,例如输入一行数据为: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->13 2表示为2->3链表为2->3->15 1表示为1->5链表为2->3->1->54 5表示为5->4链表为2->3->1->5->47 2表示为2->7链表为2->7->3->1->5->4最后的链表的顺序为 2 7 3 1 5 4最后一个参数为2,表示要删掉节点为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(" ")); });
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(' '))
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(' '));