24.成对的交换节点(24.Swap Nodes in Pairs)

题目:

给定一个链表,交换每两个相邻的节点并返回其头。

例如,
给定1->2->3->4,您应该返回列表2->1->4->3

您的算法应该仅使用恒定空间。您不能修改列表中的值,只能改变节点本身。

 

思路:从链表的头节点开始将相邻的两个节点进行交换位置,然后剩下未交换的节点作为一个新的链表进行递归的交换,直到所要进行交换的链表节点个数小于2,则返回此链表。

 

代码:

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) { val = x; }
 7  * }
 8  */
 9 class Solution {
10     public ListNode swapPairs(ListNode head) {
11         
12         //思路:从链表的头节点开始将相邻的两个节点进行交换位置,然后剩下未交换的节点作为一个新的链表进行递归的交换,直到所要进行交换的链表节点个数小于2,则返回此链表。
13         
14         if(head==null||head.next==null){
15             
16             return head;
17             
18         }
19         
20         ListNode l=head.next.next;//剩下未进行交换节点组成的新链表的表头;
21         
22         //将原链表的头节点和第二个节点进行交换位置
23         ListNode temp=head;
24         head=temp.next;//将原链表的第二个节点变为头节点
25         head.next=temp;//将原链表的头节点变为第二个节点
26         temp.next=swapPairs(l);//新链表进行递归交换相邻节点作为已经交换相邻节点的第二个节点的后继节点;
27         
28         return head;
29     }
30 }

 

转载于:https://www.cnblogs.com/xuzhiyuan/p/7655552.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值