有n个节点的列表。
我必须编写一个伪代码,使用3个指针打印列表第二个三分之一的节点。什么是复杂性?
如果我可以通过计数器使用,那很简单,但这是禁止的。
我考虑将前三个节点的三个指针放在一起,然后在第三个指针旁边。如果它不是终端节点,请在第二个节点旁边..但我的伪代码太长而且复杂。
另一个问题:如何使用两个指针来完成?
例如:列表:1-> 2-> 3-> 4-> 5-> 6-> 7-> 8-> 9可以打印元素:4,5 6。
任何帮助表示赞赏!
答案 0 :(得分:1)
两个指针只是一个变种,但你写这个问题的方式有点模糊
列表的第二个三分之一的节点(2/3)
对我来说,“第二个三分之一”意味着列表的中间三分之一,但你写了2/3。
答案 1 :(得分:1)
使用2个指针很容易: 将指针1放在第一个位置 指针2在第3位
并且做:
while pointer2 not null{
print pointer1
pointer1.next
print pointer1
pointer1.next
pointer2.next 3 times if pointer2 is not null
}
例如,列表是1,2,3,4,5,6
pointer1=1
pointer2=3
pointer2/=null then
print pointer1 (1)
pointer1.next
print pointer1 (2)
pointer1.next
pointer2=pointer2.next 3 times then pointer2=6
再次
pointer2/null then
print pointer1 (3)
pointer1.next
print pointer1 (4)
pointer1.next
pointer2.next is null, then the program will terminate here
你得到的清单是1,2,3,4,它是6个元素列表中的2/3
这里有任何疑问的答案:)
答案 2 :(得分:1)
最后是双指针解决方案,没有计数器,没有双链表
set the pointer1 in the 1st position
set the pointer2 in the 3rd position
while pointer2/=null{
pointer1.next
pointer2.next 3 times if pointer2=/null
}
//at this point we have the pointer1 in the first middle third element
//we only have to do the process again, but printing the elements
//we have to set the pointer2 to the third element, to start again
set the pointer2 in the 3rd position
while pointer2/=null{
pointer1.print
pointer1.next
pointer2.next 3 times if pointer2/=null
}
在第一次迭代中,我们将pointer1放在中间三分之一的第一个元素中,在第二次迭代中我们打印了我们需要的所有元素,诀窍是当指针2第一次到达末尾时重置它
答案 3 :(得分:0)
我找到了带有两个指针的其他解决方案但链接列表必须是双链表(带有next和prev)
set pointer 1 to the first element
set pointer 2 to the third element
while pointer 2/=null {
pointer1.next
pointer2.next 3 times if pointer2.next/=null
}
//in this part we have pointer1 in the first middle third element
while pointer1/=pointer2{
pointer1.next
pointer1.print
pointer2.prev
}
再次以1,2,3,4,5,6为例
pointer1=1
pointer2=3
pointer2.next/=null then
pointer1.next (pointer1=2)
pointer2.next 3 times, (pointer2=6)
pointer2.next=null then we enter in the second loop
pointer1.next (pointer1=3)
pointer1.print (3)
pointer2.prev (pointer2=5)
pointer1/=pointer2 then
pointer1.next (pointer1=4)
pointer1.print(4)
pointer2.prev (pointer2=4)
pointer1==pointer2, end of program
我们在控制台输出中有3,4个