java和c++的链表操作-创新互联

java和c++链表的表示以及基本操作 c++单链表的表示
struct Node{
    int value;  //表示这个节点的值
    Node *next; //表示下一个节点的指针
}a[200000], *head, *tail;

//定义了20万个节点,头指针和尾指针;
int index = 0;//用来表示当前节点用到了哪里
c++单链表的添加
void addFirst(int x){//如果头指针为空,也就是上面的head为空,则调用这个方法
	a[index].value = x;
    head = &a[index];  //因为head为指针,所以要用地址符号。
    tail = &a[index];
    index++;
}

void addToHead(int x){ //添加在最前面
    a[index].value = x;
    a[index].next = head; //当前节点的下一个节点修改为头节点
    head = &a[index]; //头节点修改为当前节点
    index++;
}

void addToTail(int x){//添加在最后面
    a[index].value = x;
    tail->next = &a[index]; //尾巴的下一个为a[index],因为tail是指针,所以要用箭头
    tail = &a[index];       //修改尾巴为当前节点;
    index++;
    
}

void add(int x, Node node){ //在node节点后面添加一个节点x
    a[index].value = x;
    a[index].next = node.next; //先增加一条线,也就是先让当前节点指向node的下一个节点
    node.next = &a[index];     //在让node的下一个为当前添加节点。
}
c++单链表的删除
void delete(Node *node){ //删除node节点,参数为Node node 也就是调用方法时要用delete(a[i]), 如果为*node,就是delete(&a[i]),此处为*node
    if(head == node){ //如果为头节点,就不用管之前的
        head = head->next;
    }
    else{
        //先找到删除节点的前一个节点, 可以在结构体里面定义一个pre指针,这样可以O(1)删除
        //接下来的方法是遍历方法找到该节点的前一个,复杂度为O(n);
        Node *h = head;
        while(h != null && h ->next != node){
            h = h ->next
        }
        h->next = h->next->next;//直接让当前节点的下一个,为当前节点下一个的下一个;
    }
}
c++循环单链表

循环单链表就是让尾指针指向头指针,每次执行玩操作后,让tail的下一个为head

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、网站空间、营销软件、网站建设、海城网站维护、网站推广。

循环单链表的好处是从任何一个节点出发都可以遍历整个链表

c++双链表

c++双链表就是可以快速的找到当前节点的前一个元素,定义结构体时,添加一个pre指针

添加或者删除时要注意先连线,在断线

list为stl中的链表,可以参考文档来学习

如果想看双链表具体的执行,可以私信我,我来更新

java单链表的定义
class Node{//如果是做题用,可以把这个类定义为静态类
    public int value;
    public Node next;
    public Node(int value){this.value = value; 
    }
}
//定义头和尾
Node head = null;
Node tail = null;
java单链表的添加
public void addFirst(int x){//如果头为空,说明当前链表为空,也就是第一次添加数据到链表
    Node cur = new Node(x); //定义当前节点
    head = cur;
    tail = cur; //添加完后,头和尾都是这个节点
}

public void addTail(int x){//添加到最后一个
    Node cur = new Node(x);
    Tail.next = cur;
    Tail = cur;
}

public void addHead(int x){Node cur = new Node(x);
    cur.next = head;
    head = cur;
}
public void add(int x, Node node){Node cur = new Node(x);
    cur.next = node.next;
    node.next = cur;
}
java单链表的删除
public deleteHead(){//删除第一个
 	head = head.next;   
}
public delete(Node node){//同c++,得先找到它的上一个节点, 如果定义的不是双链表,则这个操作为O(n);
    Node h = head;
    while(h.next != node){h = h.next;
    }
    h.next = h.next.next; //也可为h.next = node.next;
}
java循环单链表

每次执行完添加或者操作之后,让尾指针的next = 头指针, tail.next = head

java双链表

双链表的好处就是可以更快的找到当前节点的前一个节点,表示的话多了一个pre指针(java可能不叫指针)

添加或者删除时要注意先连线,在断线

LinkedList为Java jdk中提供的链表,可以参考文档来学习

如果想看双链表具体的执行,可以私信我,我来更新

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前标题:java和c++的链表操作-创新互联
本文路径:http://ybzwz.com/article/cseeig.html