两两交换链表中的节点

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
【两两交换链表中的节点】示例:
给定 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) {if (head == null || head.next == null) { return head; }//ListNode h = new ListNode(0); //h.next = head; //ListNode t = h; ListNode f = head; ListNode s = head.next; f.next = s.next; s.next = f; ListNode h = f; while (h.next != null && h.next.next != null) { ListNode first = h.next; ListNode second = h.next.next; h.next = second; first.next = second.next; second.next = first; h = h.next.next; }return s; } }

    推荐阅读