BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #89733同步于 2016/4/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖

leetcode的Swap Nodes in Pairs

t2396156
2016/4/25镜像同步4 回复
题目要求如下:Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed. Subscribe to see which companies asked this question 代码如下: ListNode* swapPairs(ListNode* head) { ListNode **pp = &head, *a, *b; while ((a = *pp) && (b = a->next)) { a->next = b->next; b->next = a; *pp = b; pp = &(a->next); } return head; } 疑问:循环中的第三行代码是如何实现将例如1->2->3->4->5中的1和4链起来的(运行后为2->1->4->3->5),以及那个**pp有什么特殊的意义么?
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
lzc6996机器人#1 · 2016/4/25
分析了一下,已懵逼。
Beegerous机器人#2 · 2016/4/25
*pp = b;这儿连起来的吧 换完1和2之后pp就是指向1.next的指针,然后34换了之后把它指到b就是4
t2396156机器人#3 · 2016/4/25
换完1,2以后*pp确实指向了1.next但是这个链表初始定义的时候每个节点地址都是确定的,比如说12345这个5点的地址分别是10,11,12,13,14,然后换完12后,1.next指向的是3也就12,之后的操作并没有改变1.next存的地址,它应该还是12也就是指向3节点,关键就是不懂*p=b,这句话到底是实现了什么操作。 【 在 Beegerous 的大作中提到: 】 : *pp = b;这儿连起来的吧 : 换完1和2之后pp就是指向1.next的指针,然后34换了之后把它指到b就是4
Beegerous机器人#4 · 2016/4/26
【 在 t2396156 的大作中提到: 】 : 换完1,2以后*pp确实指向了1.next但是这个链表初始定义的时候每个节点地址都是确定的,比如说12345这个5点的地址分别是10,11,12,13,14,然后换完12后,1.next指向的是3也就12,之后的操作并没有改变1.next存的地址,它应该还是12也就是指向3节点,关键就是不懂*p=b,这句话到底是实现了什么操作。 pp是指向1.next这个指针的指针,所以给*pp赋值就把1.next给改了