2014-02-19 73 views
0

我写了一个链接列表实现,它由firstNode开头,并在lastNode结束。我试图颠倒它与firstNode的例外完美结合的列表。假设我在从firstNode开始到lastNode的列表中有以下几条数据:“one”,“two”,“three”,“four”,“five”。当我运行我的reverseMePlz()方法时,将显示以下内容:四个,三个,两个,一个。原来的firstNode(one)现在是lastNode,而原来的lastNode(five)并不是第一个节点,而是两个应该是第二个节点的节点正在成为第一个节点,所以本质上它删除了原本应该是第一节点的lastNode。这里是我的代码:反向链接列表不解决firstNode

public void reverseMePlz() 
{ 
    Node nextNode = null; 

    Node currentNode = firstNode; 

    while (currentNode.next != null) 
    { 
     nextNode = currentNode.next; 
     currentNode.next = currentNode.previous; 

     firstNode = currentNode; 
     currentNode = nextNode; 

    } 

    lastNode = currentNode; 

} 
+0

这是一个双向链表吗? – Inertiatic

+0

是的,它是双向链接的。 Node是我的列表类中的一个私有类,具有以下实例变量:T data,Node next,Node previous。 – Whoppa

+0

虽然扭转你不改变你的'以前的' – Aditya

回答

0

更改您的while循环的条件,

while(currentNode!=null) 

下面是代码,

public void reverse(Node headNode) { 
     Node nextNode = null; 
     Node previousNode = null; 
     Node currentNode = headNode; 

     while(currentNode!=null) { 
      nextNode = currentNode.next; 
      currentNode.next = previousNode; 
      currentNode.previous = nextNode; 
      previousNode = currentNode; 
      currentNode = nextNode; 
     } 
     headNode = previousNode; 
} 
0

我想通了。这是我的解决方案:

public void reverseMePlz() 
    { 
     Node nextNode = null, currentNode = firstNode, first = firstNode; 

     while (currentNode.next != null) 
     { 
      nextNode = currentNode.next; 

      currentNode.next = currentNode.previous; 
      currentNode.previous = nextNode; 

      firstNode = currentNode; 
      currentNode = nextNode; 

     } 

     lastNode.next = firstNode; 
     firstNode = lastNode; 
     lastNode = first; 
     firstNode.previous = null; 

    } 
+0

的链接很高兴你明白了它。删除了我的答案,因为我搞砸了某个地方。 – Inertiatic