LeetCode_Linked List_Swap Nodes in Pairs
2015-06-29 23:57
579 查看
24. Swap Nodes in Pairs
1. 问题描述:
输入是一个链表,交换两个相邻节点位置,最后返回操作后的新链表。2. 解决思路:
该问题主要的环节就是交换操作的过程;所以我们先进行思考,如果要交换两节点的位置,首先需要几个指针去复制暂存元素:pre:指向每次交换两元素的前一个元素;
p:交换的两元素的第一个元素;
q:交换的两元素的第二个元素;
注意:当头节点和其后一个元素交换时,略有不同,需要把head指向第二个元素;
交换操作步骤:
q = p->next; 每次交换时先让 q 指向要交换的第二个元素;
p->next = q->next; 要交换的第一个元素指向下次交换两元素的第一个元素;
q->next = p; 第二个元素指向第一个元素;
pre->next = q; 上次交换两元素的最后一个元素指向这次交换完成的第一个元素;(如果是头节点,没有上次交换的两元素,则需要把头节点指向q,即head=q)
pre = p; pre指向交换成功后的第二个元素,即交换前的第一个元素p;
p = p->next; p指向下次要交换两元素的第一个元素;
具体见代码
3. java代码:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ public class Solution { public ListNode swapPairs(ListNode head) { ListNode p = head; ListNode pre = null; while(p != null && p.next != null) { ListNode q = p.next; p.next = q.next; q.next = p; if(pre == null){ head = q; } else { pre.next = q; } pre = p; p = p.next; } return head; } }
4. 算法评估:
希望大家能多多指正交流!
相关文章推荐
- LeetCode-Count Complete Tree Nodes -解题报告
- nodejs socket error Error:read ECONNRESET
- nodejs 导出excel
- 解决 SVN Skipped 'xxx' -- Node remains in conflict
- Socket.IO 和 Node.js 入门
- 完全面向于初学者的Node.js指南
- 阿里云性能真的是差到了极点……
- node.js读取文件到字符串的方法
- [LeetCode] Remove Nth Node From End of List 移除链表倒数第N个节点
- node.js读取文件到字符串的方法
- 美团酒店Node全栈开发实践
- nodejs返回下载文档,文档名称出现汉字出现乱码解决
- node.js安装环境的检查和配置
- Node.js学习-----------异步文件读取
- 《Node.js项目实践:构建可扩展的Web应用》
- nodejs开发调试时,使用supervisor
- node操作mysql数据库
- Leetcode 24 Swap Nodes in Pairs
- nodejs学习过程的问题
- ENode框架Conference案例分析系列之 - 文章索引