两两交换链表中的结点
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;
}