转载:详解P=Q->NEXT和P->NEXT=Q的区别,链表操作,附代码

详解P=Q->NEXT和P->NEXT=Q的区别,附代码

单链表简单操作

(1)P=Q
在这里插入图片描述

将q的value和next都赋值给p意味着p和q的value值相同同时都指向q的下一个对象

(2)P.NEXT = Q
在这里插入图片描述

将q赋值给p.next。也就是说p的next中保存的会是q。那么p的下一个节点为q同时p与t的连接断开了

(3)P=Q.NEXT

在这里插入图片描述

理解为q.next(t)赋值给p,也就是将t赋值给p。即t和p的value和next值相同。p和t同时指向t的下一个元素

###下面给出代码说明,为便于理解和证明为Node添加name属性

NODE类

public class Node {
    public String name;
    public int value;
    public Node next;
    public Node(){
    }
    public Node(int data){
        this.value = data;
    }
    public Node(String name){
        this.name = name;
    }
    public Node(String name,int data){
        this.name = name;
        this.value = data;
    }
    
}

输出类PRINT

public class Print {
    public static void printLinkedList(Node node) {
        System.out.print("Linked List: ");
        while (node != null) {
            System.out.print(node.name + ":"+ node.value + "->");
            node = node.next;
        }
        System.out.println();
    }

}

测试类

public class Test {
    public static void main(String[] args) {
        Print print = new Print();
        Node node1 = new Node("node1",1);
        Node node2 = new Node("node2",2);
        Node node3 = new Node("node3",3);
        Node node4 = new Node("node4",4);
        node1.next = node2;
        node2.next = node3;
        node3.next = node4;
        node4.next = null;

        //(1)未作修改
        //print.printLinkedList(node1);

        //(2)测试 p = q    node = node2
        //Node node = new Node("node");
        //node = node2;
        //print.printLinkedList(node1);
        //print.printLinkedList(node);

        //(3)测试p.next = q  node2.next = node
        //Node node = new Node("node",22);
        //node2.next = node;
        //print.printLinkedList(node1);

        //(4)测试p=q.next  node = node2.next
        Node node = new Node("node",22);
        node = node2.next;
        print.printLinkedList(node1);
        print.printLinkedList(node);

    }
}

运行结果
(1)

Linked List: node1:1->node2:2->node3:3->node4:4->

(2)node = node2;

Linked List: node1:1->node2:2->node3:3->node4:4->
Linked List: node2:2->node3:3->node4:4->

第二个是以node2开头,证实了是将node2赋值给node所以

name,value,next都相同

(3)node2.next = node;

Linked List: node1:1->node2:2->node:22->

这里node2和node3的连接被断开了

(4)node = node2.next;

Linked List: node1:1->node2:2->node3:3->node4:4->
Linked List: node3:3->node4:4->

这里证实了将node2的下一个节点赋值给node所以node和node3的

name,value,next都相同。

延伸
1.理解NODE2.NEXT = NODE; NODE.NEXT = NODE3是在弄得NODE2和NODE3之间插入NODE节点
在这里插入图片描述

2.理解NODE.NEXT = NODE3;NODE2.NEXT = NODE; 是在弄得NODE2和NODE3之间插入NODE节点
在这里插入图片描述

3.P.NEXT=Q.NEXT是删除Q节点
在这里插入图片描述

//插入节点1
Node node = new Node(22);
node2.next = node;
node.next = node3;
print.printLinkedList(node1);


//插入节点2
Node node = new Node(22);
node.next = node3;
node2.next = node;
print.printLinkedList(node1);

//删除节点
node2.next = node3.next;
print.printLinkedList(node1);

赋值构造函数

iint main(int argc, char * argv[])
{
CExample A;
A.Init(40);

 CExample C;  
 C.Init(60);  

 //现在需要一个对象赋值操作,被赋值对象的原内容被清除,并用右边对象的内容填充。  
 C = A;  
return 0;  

}
用到了"="号,但与上面的例子中语句“ CExample B=A; ” 不同“ CExample B=A; ”语句中的 “=” 在对象声明语句中,表示初始化。更多时候,这种初始化也可用括号表示。 例CExample B(A);

而本例子中,"=" 表示赋值操作。将对象 A 的内容复制到对象C;,这其中涉及到对象C 原有内容的丢弃,新内容的复制。 但"=“的缺省操作只是将成员变量的值相应复制。旧的值被自然丢弃。 由于对象内包含指针,将造成不良后果:指针的值被丢弃了,但指针指向的内容并未释放。指针的值被复制了,但指针所指内容并未复制。 因此,包含动态分配成员的类除提供拷贝构造函数外,还应该考虑重载”="赋值操作符号。

注意:拷贝构造函数是在对象被创建时调用的,而赋值构造函数只能被已经存在了的对象调用

转载于:
版权声明:本文为weixin_42988712原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42988712/article/details/107447667

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值