java和c++的链表操作-创新互联
java和c++链表的表示以及基本操作
c++单链表的表示
分享名称:java和c++的链表操作-创新互联
URL标题:http://azwzsj.com/article/cseeig.html
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++的链表操作-创新互联
URL标题:http://azwzsj.com/article/cseeig.html