两两交换链表中的节点

题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例说明请见LeetCode官网。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解法一:双指针法
  • 首先,如果head为空或者head没有后继节点,直接返回head;

  • 然后用2个指针first和second分别指向第一个和第二个节点,new一个pre节点指向first,操作过程如下:

    • first的next指向second的next;

    • second的next指向first;

    • pre的next指向second;

    • 前面几步就是把first和second的位置交换;

    • 然后pre指向first;

    • first指向first的next;

    • 然后进行下一次遍历,条件是first不为空且first的next不为空,直到这个条件不成立,则遍历结束。

    • 返回结果。

public class LeetCode_024 {
public static ListNode swapPairs(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = head.next;
ListNode pre = new ListNode(-1), first = head, second;
pre.next = head;
while (first != null && first.next != null) {
second = first.next; first.next = second.next;
second.next = first;
pre.next = second; pre = first;
first = first.next;
} return newHead;
} public static void main(String[] args) {
ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = new ListNode(4);
head.next.next.next.next = new ListNode(5); ListNode result = swapPairs(head);
while (result != null) {
System.out.print(result.val + " ");
result = result.next;
}
}
}

【每日寄语】 宇宙山河浪漫,生活点滴温暖,都值得你我前进。

最新文章

  1. 关于移动app开发的一些不错的站点
  2. SortedMap接口的实现类TreeMap介绍和实现Comparator自定义比较器(转)
  3. PHPCMS 模板制作标签
  4. Windows 2008 R2 配置 DNS 实现二级域名
  5. android baseApplication 基类
  6. Spring中自动装配(转)
  7. [转]“WARNING: soft rlimits too low” in MongoDB with Mac OS X
  8. DPDK2.1开发者手册4-7
  9. KEIL中的变量相关
  10. 关于String.concat()方法和StringBuffer.append()方法的学习:方法是如何追加字符到源字符串的
  11. 升讯威微信营销系统开发实践:(4)源代码结构说明 与 安装部署说明( 完整开源于 Github)
  12. vh、vw、vmin、vmax 知多少
  13. CentOS 查看和修改 Mysql 字符集
  14. 【Oracle学习笔记】定时任务(dbms_job)
  15. [Swift]LeetCode153. 寻找旋转排序数组中的最小值 | Find Minimum in Rotated Sorted Array
  16. crosstool-ng-1.22.0搭建开发环境
  17. VS - 未能找到与解决方案关联的源代码管理提供程序
  18. Linux掉电处理
  19. (c++) int 转 string,char*,const char*和string的相互转换
  20. mysql INNER/LEFT/RIGHT JOIN区别

热门文章

  1. CSS之 sass、less、stylus 预处理器的使用方式
  2. Servlet中的Filter 过滤器的简单使用!
  3. MySQL 行锁、表锁
  4. SharePoint Online 触发 Outlook 邮件内审批
  5. 在 Dapr 中使用 Cron 绑定的计划任务
  6. SpringBoot使用IDEA设置的外部Tomcat启动
  7. iOS中播放音效
  8. JAVA! static的作用
  9. python——schedule库实现定时任务
  10. HDFS源码解析系列一——HDFS通信协议