赞
踩
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
声明:虚拟头真好用 :)
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode swapPairs(ListNode head) { ListNode root = new ListNode(0); root.next = head; ListNode p = root; while(p.next != null && p.next.next != null) { ListNode lt = p.next; ListNode gt = p.next.next; lt.next = gt.next; p.next = gt; gt.next = lt; p = p.next.next; } return root.next; } }
看代码应该能轻易理解。
下面称两个待交换结点,左边的叫左节点,右边的叫右节点。
具体步骤:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode swapPairs(ListNode head) { if(head == null) return null; if(head.next == null) return head; ListNode p = head; ListNode q = head.next; p.next = swapPairs(q.next); q.next = p; return q; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。