当前位置: 首页 > 知识库问答 >
问题:

双链表头正在改变而我不改变它

顾嘉良
2023-03-14
public class Node <T extends Comparable<T>> {
T data;
Node prev;
Node next;

Node(){
}

Node(T val){
    data = val;
}  }

public class DLinkedList<T extends Comparable<T>> {
Node head;
Node tail;

DLinkedList(){
    head = new Node();    
    tail = new Node();
    tail.prev = head;
}

void insertInOrder(T value){
    Node insert = new Node(value);
    if(head.next==null){
        head.next = insert;
        insert.prev = head;
        insert.next = tail;
        tail.prev = insert;
    }
    else{
        insert.prev = tail.prev;
        tail.prev.next = insert;
        tail.prev = insert;
        insert.next = tail;
    }
}

boolean find (T value){
    boolean result = false;
    Node tmp = head.next;
    if (head!=null){
        while(tmp!=null){
            if(tmp.data.compareTo(value)!=0){
                tmp = tmp.next;
            }
            else{
                result = true;
                break;
            }
        }
    }
    return result;
}

 boolean findA (T value){
    boolean result = false;
    Node tmp = head;
    if (head!=null){
        while(tmp.next!=null){
            if(tmp.next.data.compareTo(value)!=0){
                tmp.next = tmp.next.next;
            }
            else{
                result = true;
                break;
            }
        }
    }
    return result;
}

void deleteA(T value){
    Node tmp = head.next;

    while(tmp.data.compareTo(value)!=0){
            tmp = tmp.next;
    }
    if(tmp!=tail){
        if(tmp==head.next)
            head = tmp.next;
        else
             tmp.prev.next = tmp.next;

        if (tmp==tail)
            tail = tmp.prev;
        else
            tmp.next.prev = tmp.prev;
    }






}
void delete(T value){
    Node tmp = head.next;
    if(find(value)){
        while(tmp!=tail){
            if(tmp.data.compareTo(value)!=0){
                tmp = tmp.next;
            }
            else{
                tmp.prev.next = tmp.next;
                tmp.next.prev = tmp.prev;

                break;
            }
        }            
    }
}

@Override
public String toString(){
    Node tmp = head.next;
    String result = "";
        while(tmp!=tail){
            System.out.println(tmp.data);
            tmp = tmp.next;
        }
    return result;
}  }

public class ListCheck {

public static void main(String[] args) {
    DLinkedList list = new DLinkedList();
    DLinkedList listA = new DLinkedList();
    for(int i=0; i<10; i++){
        list.insertInOrder(i);
        listA.insertInOrder(i);
    }
    System.out.println(listA.findA(9));
    System.out.println(list.find(9));  
    listA.toString();
    System.out.println("");
    list.toString();
} }

共有1个答案

弘柏
2023-03-14

在findA中,移动tmp的方式是

tmp.next = temp.next.next

通过这种方式,您正在销毁当前指针,并将其重新路由到下一个节点(Java的浅层副本):

tmp-->[node1]-->[node2]tmp-->[node2]的更改

 类似资料:
  • 我有一个智能组件,它调用一个从api检索所有信息的服务,并加载一组显示所有信息的哑组件。 当初始化时,智能组件从url中获取id,并将其发送给服务,以从api中获取所有数据,并且一切都按照预期工作,但是当我单击页面上的链接之一,该链接应该加载相同的页面但不同的id,url改变了,但不改变视图,并且我在控制台上也没有看到任何activity。 这是智能组件: 这是显示链接的哑组件: 这是从“第一个”

  • 我想通过以下方式更改JButton的颜色: 为了进行更改,我必须补充: 但是,这会删除边缘周围的曲线,从而更改按钮的形状。有没有一种方法可以简单地改变颜色并保留其他属性?另一个例子是当你按下一个按钮而没有改变它的颜色时,颜色的改变(变暗)。 下面是一些代码,说明了这两个按钮之间的区别: 谢谢

  • 我刚刚在我的项目中启用了迁移,并在中添加了几个字段: I并创建: 产生了以下输出: 显然一切都进行得很顺利,但在收到一个错误,即column CreatedOn不存在之后,我用服务器资源管理器查看了数据库,事实上,我的表中缺少了所有4个column。我做错了什么? 我发现了我的错误。不知何故,我有两个不同的文件和具有相同的文件大小,我认为两者都是必要的。我的服务器资源管理器正在使用,数据库更改为。

  • 我从数据库中检索了很多数据,并使用这些数据创建了一个图表(其中一些是添加的) 现在我的问题是:有什么方法可以阻止程序四舍五入加倍,除非它是。75或更近?相反,在这个例子中,舍入到85?

  • 本文向大家介绍Android中App字体大小不随系统改变而改变,包括了Android中App字体大小不随系统改变而改变的使用技巧和注意事项,需要的朋友参考一下 在 "设置" , "显示" , "字体大小" 里面我们可以设置系统字体大小 App界面字体,如果被修改之后,可能就达不到理想状态的效果,界面布局就发生了变化。 未修改过的效果(测试机型:Nexus 5):        正常        

  • 我创建了一个单链表函数,我的教授说,为了获得额外的学分,我们可以将其更改为双链表。我读了一些东西,比如添加一个prev_节点函数,比如这样。 然而,我不知道从那里去哪里。我知道我需要像这里一样加上一个尾巴和一个脑袋。 谁能告诉我,(不要为我做这件事),我必须做什么才能把我的链接列表变成一个双重链接列表?我知道我现在必须参考尾巴和头部,但我对如何做到这一点很困惑。