我有一個 x 數字串列,我需要評估哪些大于 50 并從串列中洗掉這些數字,然后列印出新串列。我不知道如何添加條件 >50,因為它呈現一個空白陣列。另外,有沒有更省時的方法來寫這個?感謝所有的幫助。我很困惑。
class Node {
constructor(d) {
this.data = d;
this.next = null;
}
}
class LinkedList {
constructor(head = null) {
this.head = head
}
}
let firstNode = new Node(38);
let list = new LinkedList(firstNode);
let secondNode = new Node(74);
firstNode.next = secondNode;
let thirdNode = new Node(87);
secondNode.next = thirdNode;
let fourthNode = new Node(21);
thirdNode.next = fourthNode;
let fithNode = new Node(91);
fourthNode.next = fithNode;
let sixthNode = new Node(98);
fithNode.next = sixthNode;
let seventhNode = new Node(73);
sixthNode.next = seventhNode;
let eigthNode = new Node(41);
seventhNode.next = eigthNode;
let nithNode = new Node(29);
eigthNode.next = nithNode;
let tenthNode = new Node(3);
nithNode.next = tenthNode
let eleventhNode = new Node(72);
tenthNode.next = eleventhNode;
let twelthNode = new Node(94);
eleventhNode.next = twelthNode;
let thirteenthNode = new Node(12);
twelthNode.next = thirteenthNode;
let fourteenthNode = new Node(13);
thirteenthNode.next = fourteenthNode;
let fiftheenthNode = new Node(16);
fourteenthNode.next = fiftheenthNode;
let currentNode = list.head;
while (currentNode != null && currentNode > 50) {
console.log(currentNode.data);
currentNode = currentNode.next;
}
uj5u.com熱心網友回復:
您需要對頭部進行例外處理,并且您正在使用的回圈實際上應該用于在穿過所有節點的另一個回圈中洗掉(因此外部回圈不能過濾)。currentNode.data > 50
我已經編輯了您的代碼,使其表現得更像您要求的那樣:
class Node {
constructor(d) {
this.data = d;
this.next = null;
}
}
class LinkedList {
constructor(head = null) {
this.head = head
}
//for printing
printable(sll) {
if (this.head == null) {
return 'Empty list';
}
let sll_str = `${this.head.data}`;
let cNode = this.head.next;
while (cNode != null) {
sll_str = `, ${cNode.data}`;
cNode = cNode.next;
}
return sll_str;
}
}
let firstNode = new Node(38);
let list = new LinkedList(firstNode);
let secondNode = new Node(74);
firstNode.next = secondNode;
let thirdNode = new Node(87);
secondNode.next = thirdNode;
let fourthNode = new Node(21);
thirdNode.next = fourthNode;
let fithNode = new Node(91);
fourthNode.next = fithNode;
let sixthNode = new Node(98);
fithNode.next = sixthNode;
let seventhNode = new Node(73);
sixthNode.next = seventhNode;
let eigthNode = new Node(41);
seventhNode.next = eigthNode;
let nithNode = new Node(29);
eigthNode.next = nithNode;
let tenthNode = new Node(3);
nithNode.next = tenthNode
let eleventhNode = new Node(72);
tenthNode.next = eleventhNode;
let twelthNode = new Node(94);
eleventhNode.next = twelthNode;
let thirteenthNode = new Node(12);
twelthNode.next = thirteenthNode;
let fourteenthNode = new Node(13);
thirteenthNode.next = fourteenthNode;
let fiftheenthNode = new Node(16);
fourteenthNode.next = fiftheenthNode;
let currentNode = list.head;
console.log("old list: ", list.printable());
while (currentNode != null) {
if (list.head == currentNode && currentNode.data > 50) {
list.head = currentNode.next;
console.log("deleting ", currentNode.data);
let toDel = currentNode;
delete (toDel);
} else {
console.log(currentNode.data);
let newNext = currentNode.next;
while (newNext != null && newNext.data > 50) {
let toDel = newNext;
newNext = newNext.next;
console.log("deleting ", toDel.data);
delete(toDel);
}
currentNode.next = newNext;
}
currentNode = currentNode.next;
}
console.log("\nnew list: ", list.printable());
(我還在LinkedList該類中添加了一個函式以使其更易于列印。)
uj5u.com熱心網友回復:
這可以通過回圈創建的鏈表來完成,如果值小于等于 50,則將其放入新的鏈表并映射它。最后一個控制臺是列印出實際的鏈表,因為最初我們創建了具有 Infinity 值的 dummyHead,所以我們的結果從 resultHead 的下一個開始。
class Node {
constructor(d) {
this.data = d;
this.next = null;
}
}
class LinkedList {
constructor(head = null) {
this.head = head
}
}
let firstNode = new Node(38);
let list = new LinkedList(firstNode);
let secondNode = new Node(74);
firstNode.next = secondNode;
let thirdNode = new Node(87);
secondNode.next = thirdNode;
let fourthNode = new Node(21);
thirdNode.next = fourthNode;
let fithNode = new Node(91);
fourthNode.next = fithNode;
let sixthNode = new Node(98);
fithNode.next = sixthNode;
let seventhNode = new Node(73);
sixthNode.next = seventhNode;
let eigthNode = new Node(41);
seventhNode.next = eigthNode;
let nithNode = new Node(29);
eigthNode.next = nithNode;
let tenthNode = new Node(3);
nithNode.next = tenthNode
let eleventhNode = new Node(72);
tenthNode.next = eleventhNode;
let twelthNode = new Node(94);
eleventhNode.next = twelthNode;
let thirteenthNode = new Node(12);
twelthNode.next = thirteenthNode;
let fourteenthNode = new Node(13);
thirteenthNode.next = fourteenthNode;
let fiftheenthNode = new Node(16);
fourteenthNode.next = fiftheenthNode;
let currentNode = list.head;
let resultNode = new Node(-Infinity);
let resultHead = resultNode;
while (currentNode != null) {
//console.log(currentNode.data);
if(currentNode.data <= 50){
resultNode.next = new Node(currentNode.data);
resultNode = resultNode.next;
}
currentNode = currentNode.next;
}
console.log(resultHead.next);
uj5u.com熱心網友回復:
我很高興您像我一樣為 LinkedList 選擇 Javascript。我會為您提供解決方案,請參考:
function deleteNode(position)
{
// If linked list is empty
if (head == null)
return;
// Store head node
var temp = head;
// If head needs to be removed
if (position == 0)
{
// Change head
head = temp.next;
return;
}
// Find previous node of the node to be deleted
for(i = 0; temp != null && i < position - 1; i )
temp = temp.next;
// If position is more than number of nodes
if (temp == null || temp.next == null)
return;
// Node temp->next is the node to be deleted
// Store pointer to the next of node to be deleted
var next = temp.next.next;
// Unlink the deleted node from the list
temp.next = next;
}
在這里,您可以傳遞要洗掉的鏈表元素的位置 = 位置。
只需先用紙和筆實作下面的代碼,然后你就會明白這一點。
如有任何困惑,請在此處發表評論讓我知道。
快樂編碼!
uj5u.com熱心網友回復:
另一種解決方案是跟蹤previous節點。這允許有效地跳過節點:
class Node {
constructor(d) {
this.data = d;
this.next = null;
}
}
class LinkedList {
constructor(head = null) {
this.head = head
}
static fromArray(numbers) {
if (numbers.length === 0) {
return null;
}
const [first, ...rest] = numbers;
const head = new Node(first);
let current = head;
rest.forEach(n => {
const newNode = new Node(n);
current.next = newNode;
current = newNode;
});
return new LinkedList(head);
}
toString() {
let current = this.head;
let repr = "";
while (current != null) {
repr = current.data ' -> '
current = current.next;
}
repr = 'null';
return repr;
}
}
let list = LinkedList.fromArray(
[38, 74, 87, 21, 91, 98, 73, 41, 29, 3, 72, 94, 12, 13, 16]
);
console.log("BEFORE: ", list.toString());
let current = list.head;
let previous = null;
while (current != null) {
if (current.data <= 50) {
// value is in the valid range, update pointers
previous = current;
current = current.next;
// skip to next loop iteration
continue;
}
if (current === list.head) {
// if we are at the head of the list there is no previous value
// overwrite the head
list.head = current.next;
}
else {
// if we are past the head of the list there is a previous value
// skip the current value by updating the previous node's 'next' to the
// current node's next
previous.next = current.next;
}
// advance to the next element
current = current.next;
}
console.log("AFTER: ", list.toString());
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/520448.html
上一篇:如何找到兩個值的組合,使得它們的比率和總和固定為具有R的某些數字
下一篇:如何在DFS森林中取樹根?
