当前位置:   article > 正文

两两交换链表中的节点(简单实现)

两两交换链表中的节点

题目

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

 //Definition for singly-linked list.
 public class ListNode {
     int val;
     ListNode next;
     ListNode(int x) { val = x; }
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.

注意点

1、创建记录结果的头结点(头结点不记录数据,便与循环)和记录上次遍历结果的最后节点;
2、只要链表中存在两个或两个以上的数据就执行以下循环:
在这里插入图片描述
3、节点交换后,一次跳过两个节点继续循环;
4、返回的结果为result.next(result头结点不记录数据)。

实现

    public ListNode swapPairs(ListNode head) {
    	//记录结果的头结点
        ListNode result = new ListNode(0);
        result.next = head;
        //记录上次遍历结果的最后节点(下次的头节点)
        ListNode pre = result;   
        
        while(head != null && head.next != null){
        	//保存
            ListNode temp = head.next.next;
            pre.next = head.next;
            head.next.next = head;
            head.next = temp;
            head = temp;
            pre = pre.next.next;
        }
        return result.next;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/数据可视化灵魂/article/detail/61282
推荐阅读
相关标签
  

闽ICP备14008679号