以下是我的代码,用于查找双链表的中间节点,但它仅适用于奇数个节点。我无法弄清楚如何处理偶数节点的情况:
public Object findMiddleNode() {
DLNode first = getHeadNode();
DLNode last = getTailNode();
while(first!=last) {
first = first.getNext();
last = last.getPrevious();
}
return first.getElement();
}
这是我更新的代码:
public MyDequeue findMiddleNode() {
DLNode first = getHeadNode();
DLNode last = getTailNode();
MyDequeue m = new MyDequeue();
while(first!=last && first.getNext()!= last) {
first = first.getNext();
last = last.getPrevious();
}
if(first == last) {
m.insertLast(first.getElement());
return m;
}
else {
m.insertLast(first.getElement());
m.insertLast(last.getElement());
return m;
}
}
MyDequeue类是我对双向链表的实现。我返回MyDequeue的原因是因为我已经有了一个打印双向链表的元素的静态打印方法。
答案 0 :(得分:2)
对于偶数个节点,第一个和最后一个在中间相互传递。例如,如果你有4个节点1..4,当last是3时,第一个节点将是2.在下一个迭代中,第一个将是3,最后一个将是2.所以你永远不会失败while循环测试(首先!=最后)需要在适当的点退出循环。一个简单的解决方法是将您的while测试修改为
while ((first != last) && (first.getNext() != last)) {
。
答案 1 :(得分:1)
This is my code in java
import java.util.LinkedList;
public class DeleteMiddleLinkedList {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
DeleteMiddleLinkedList ds = new DeleteMiddleLinkedList();
ds.middleDelete(list, "");
for (String s : list) {
System.out.println(s);
}
}
public void middleDelete(LinkedList<String> list, String s) {
int size = list.size();
if (list == null) {
return;
}
if (size % 2 == 0) {
list.remove(size / 2);
list.remove((size / 2) - 1);
} else if (size % 2 != 0) {
list.remove((size / 2));
}
}
}
答案 2 :(得分:0)
这是我更新的代码:
public MyDequeue findMiddleNode()
{
DLNode first = getHeadNode();
DLNode last = getTailNode();
MyDequeue m = new MyDequeue();
while(first!=last && first.getNext()!= last)
{
first = first.getNext();
last = last.getPrevious();
}
if(first == last)
{
m.insertLast(first.getElement());
return m;
}
else
{
m.insertLast(first.getElement());
m.insertLast(last.getElement());
return m;
}
}
MyDequeue类是我对双向链表的实现。我返回MyDequeue的原因是bcuz我已经有一个静态打印方法打印双链表的元素。对于更好的解决方案的任何建议?