【数据结构与算法】链表——两两交换链表中的结点

两两交换链表中的结点

LeetCode:两两交换链表中的结点

题目描述:

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

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

示例:

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

思想:

没啥思想,一个递归,一个循环,两种方法,注意熟练掌握。

代码

  • 递归
private ListNode swapPairsImpl(ListNode L){
    if(L.next==null) return null;
    if(L.next.next == null) return L.next;
    ListNode p = L.next,q=p.next;
    p.next = swapPairsImpl(q);
    L.next = q;
    q.next = p;
    return q;
}
public ListNode swapPairs(ListNode head) {
    ListNode L =new ListNode(-1);
    L.next = head;
    return swapPairsImpl(L);
}
  • 循环
public ListNode swapPairs(ListNode head) {
    ListNode L =new ListNode(-1);
    L.next = head;
    ListNode m, p=L,q;
    while(p.next!=null&&p.next.next!=null){
        m=p;p = m.next;q=p.next;

        p.next = q.next;
        m.next = q;
        q.next = p;
    }
    return L.next;
}
原文地址:https://www.cnblogs.com/buptleida/p/12710863.html