个人LeetCode刷题记录:24. 两两交换链表中的节点
题目地址
递推法
/**
* 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;
ListNode dummy = new ListNode(0); //哑结点
dummy.next = head;
ListNode pre = dummy; //前驱节点
ListNode p = head; //当前节点
ListNode next = p.next; //后继节点
while(p != null && next != null)
{
//三个节点参与交换,前驱节点保证链表不断,当前节点与后继节点交换
pre.next = p.next;
p.next = next.next;
next.next = p;
//更新下一组参与交换的节点
pre = p;
p = p.next;
next = (p!=null) ? p.next : null;
}
return dummy.next;
}
}
- 也可以递归解决,我觉得不比递推法好,代码可以看官方解答