java如何实现C指针,java 如何包装C里的指针的思考

LEETCOODE--24题两两交换链表中的节点的不同使用方式

class Solution {//java方式

public ListNode swapPairs(ListNode head) {

ListNode dummy = new ListNode(-1);

dummy.next = head;

ListNode prevNode = dummy;

while ((head != null) && (head.next != null)) {

ListNode firstNode = head;

ListNode secondNode = head.next;

prevNode.next = secondNode;

firstNode.next = secondNode.next;

secondNode.next = firstNode;

prevNode = firstNode;

head = firstNode.next; // jump

}

return dummy.next;

}

}

class Solution {//C方式

public:

ListNode* swapPairs(ListNode* head){

ListNode* dummyHead= new ListNode(0);

dummyHead->next = head;

ListNode* p = dummyHead;

while(p->next && p->next->next)

{

ListNode* node1 = p->next;

ListNode* node2 = node1->next;

ListNode* next = node2->next;

node2->next = node1; //然后改变2的next指针指向1

node1->next = next;//然后改变1的next指针指向3。

p->next = node2;//将per前的链表连接到 完成交换的链表

p = node1;//更新per

}

ListNode* retNode = dummyHead->next;

delete dummyHead

return retNode;

}

}

1.ListNode dummy = new ListNode(-1); 等价于ListNode* dummyHead= new ListNode(0);

有点python的感觉,-1作为整一个数组的虚拟点=对第一点的双空指引。

2.dummy.next = head;等价于 dummyHead->next = head;

.等价于->

3.ListNode prevNode = dummy;等价于 ListNode* p = dummyHead;

C语言的更加好理解,创建指针,而Java通过前一个节点的属性是后一个节点的值,创建索引来给dummy加个标志。

4.while ((head != null) && (head.next != null)) 等价于 while(p->next && p->next->next)

都是头指针指向不为空,且后一个(头指针要移下去的对象)也不为空。

5.ListNode firstNode = head;ListNode secondNode = head.next;等价于 ListNode* node1 = p->next(dummyHead);ListNode* node2 = node1->next; ListNode* next = node2->next;

就是声明了第一个头节点的e是firstNode ,后一个是secondNode等价于声明了第一个是node1,后一个是node2,node2的后一是next

secondNode.next = firstNode; node2->next = node1; //然后改变2的next指针指向1

firstNode.next = secondNode.next; node1->next = next;//然后改变1的next指针指向3。

prevNode.next = secondNode; p->next = node2;//将per前的链表连接到 完成交换的链表

prevNode = firstNode; p = node1;//更新per

head = firstNode.next; // jump

指针往后一位,head是调换元素中第一个元素的位置,同样往后

后面返回数据一样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值