0

我的 LinkedList 是单一链接的(每个节点都有一个计数 + 下一个引用)。

我需要创建 runlengthencode 方法,该方法采用 LinkedList 并返回列表的运行长度编码版本,而不创建任何新节点 - 即到位。它恰好在 Java 中

我遇到的问题是跟踪代表运行开始的节点,当我沿着它运行时,它将出现在新列表中。在下面的外部while 循环中,我应该在哪里添加 rle 节点 ?

目前我有一个名为 CurrRun 的引用和一个来自 CurrRun 的跑步者,而 CurrRun 和 CurrRun.next 的值是相同的。

当心:此代码已尽可能去除其丑陋的 Java 语法

//instantiated nodes here

currRun = myListHead.next
Node runner = currRun

while (currRun.next != null){

   int count = 1;

   while (runner.value == runner.next.value){
     count++
     runner = runner.next
   //no more runs in current run
   //update currRun count
   currRun.count = count

   //move currRun to next run node
   currRun = runner.next
   }

}
// return the myHead-> currNode1 -> currNode2 -> .... -> null
return myHead

任何指针将不胜感激。

MOAN:在美国大学校,他们应该教我们这个,但我们只能自己动手

4

1 回答 1

0

我不会将结果写回currRun. 相反,我会保留指向列表中第 n 个节点的指针,并将第 n 个运行写回该节点。这样,您的新 rle 编码列表将是连续的,您不必担心哪些节点代表运行的开始,哪些不代表运行的开始。

于 2012-07-30T06:10:51.417 回答