2012-01-10 147 views
1

你好,我有一个双链表设置,我有一个搜索工作,所有的东西,我只是想从它删除。从java中的双链表中删除一个节点

对于我的搜索,我有:

public void firstNameSearch(String name) 
{ 
    Node u = header; 
    while (u != null && u.list() != name) 
    { 
     System.out.println("Searching List..."); 
      u = u.getNext(); 
    } 
    if (u.list() == name) 
    { 
     // what do I need to put here to delete it 

    } 
} 

我已经在职位上堆栈溢出看遍了,但我发现是在C中的,所以不是一个很大的帮助,我明白了如何概念使它删除节点,只是不能得到它的功能。

预先感谢您。

+3

你究竟试过了什么?什么没有用?你有没有尝试在调试器中调试它?这在C++或C#中与在Java中非常相似。你有没有看过LinkedList的代码,因为它是一个双向链表? C.F. 'LinkedList.unlink(Node)' – 2012-01-10 15:02:02

+6

'u.list()== name'和'u.list()!= name'几乎肯定不会做你想做的事。改用'String.equals()'。 – NPE 2012-01-10 15:02:05

回答

1

它是一个非常基本的操作。我假设有一个set/getPrevious()方法作为它的双链表。

[previous]<==>[u]<==>[next] 

删除的双向链表的元素将是一个和下一个节点的simply changing the references指针。

if (u.list() == name) 
    { 
     Node pre = u.getPrevious(); 
     Node next= u.getNext(); 

     //Connect next node and previous node 
     if(pre != null){ 
      next.setPrevious(pre); 
     }else{ 
     header=next; 
     } 

    //Connect previous node and next node 
     if(next != null){ 
      pre.setNext(next); 
     }else{ 
      pre.setNext(null); 
     } 




    } 
+0

这工作出色,非常感谢你! – 2012-01-10 15:32:45