法一:迭代
链表操作的最重要的是,一个结点的next指向别的结点时,该节点原来后面的那个结点不能丢,要能取到;
要使用迭代,要找多可以迭代的单元,本题的迭代单元为需要交换的两结点。
要使迭代过程中,所有结点都不丢失,至少还需要两个指针,这里设为 pre 和 tem ,分别为迭代单元的前一个结点,和迭代单元的第一个结点,
法二:递归
- 每一层递归结束后,都返回交换完成后的头结点;
- 每个函数交换两个结点,至少需要两个指针
- 复杂度分析:
时间复杂度:O ( n ) O(n)O(n),其中 n 是链表的节点数量。需要对每个节点进行更新指针的操作。
空间复杂度:O ( 1 ) O(1)O(1),法一迭代法为O ( 1 ) O(1)O(1),只需常量空间;法二递归空间复杂度为O ( n ) O(n)O(n),其中 n 是链表的节点数量。空间复杂度主要取决于递归调用的栈空间。