运行长度编码链接列表(Java)

时间:2012-07-30 06:02:30

标签: java linked-list run-length-encoding

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

我需要创建runlengthencode方法,该方法接受LinkedList并返回列表的行程编码版本,而不创建任何新节点 - 即就地。 碰巧是在Java

我遇到的问题是跟踪表示运行开始的节点,当我继续运行时,这些节点将出现在新列表中。我在哪里添加rle节点 外部 while while循环?

目前我有一个名为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:在美国大学校,他们应该教我们这个,但我们留给自己的设备

1 个答案:

答案 0 :(得分:0)

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