利用双重指针来实现单向链表的节点交换
2018-04-02 08:53
246 查看
一道Leetcode中的题:
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.
以下是摘自讨论区的一个利用双重指针的解法:
输入一个链表
node1 -> node2 -> node3 -> node4
值得注意的是代码段
第一次循环结束的时候pp指向的是node1的next指针,在第二次循环中
将node1的next赋值为node4
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.
以下是摘自讨论区的一个利用双重指针的解法:
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; }
输入一个链表
node1 -> node2 -> node3 -> node4
值得注意的是代码段
*pp = b; pp = &(a->next);
第一次循环结束的时候pp指向的是node1的next指针,在第二次循环中
*pp = b;
将node1的next赋值为node4
相关文章推荐
- 编码实现环状单向链表(尾指针直接指向头指针,中间没有空节点),去除连续的重复元素的操作
- 编码实现环状单向链表(尾指针直接指向头指针,中间没有空节点),去除连续的重复元素的操作
- 利用二级指针删除单向链表节点
- 编码实现环状单向链表(尾指针直接指向头指针,中间没有空节点),去除连续的重复元素的操作。
- 只知道某个单向链表的中的某个指针,且该指针不是尾指针,如何删除该节点。
- 转:Linus:利用二级指针删除单向链表
- C实现简单单向链表,一次遍历查找倒数第k个节点的值
- 利用二级指针删除单向链表
- Linus:利用二级指针删除单向链表
- 1.01一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?
- 利用位运算和指针实现的交换两个数的程序
- Linus:利用二级指针删除单向链表
- Linus:利用二级指针删除单向链表
- 利用类对象为节点创建简单单向链表
- 单向链表之删除节点(C语言实现)
- 链表:利用二级指针删除单向链表
- 数据结构与算法:单链表(利用万能指针实现对任意类型数据进行操作)
- 复制含有随机指针节点的链表——C++实现
- leetcode-24,交换链表相邻节点,递归实现
- java实现输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head