top24
给定一个链表,然后两两交换链表的位置。
解法一 迭代
首先为了避免单独讨论头结点的情况,一般先申请一个空结点指向头结点,然后再用一个指针来遍历整个链表。
先来看一下图示:
point 是两个要交换结点前边的一个位置。
publicListNodeswapPairs(ListNodehead) { ListNodedummy=newListNode(0); dummy.next=head; ListNodepoint=dummy; while (point.next!=null&&point.next.next!=null) { ListNodeswap1=point.next; ListNodeswap2=point.next.next; point.next=swap2; swap1.next=swap2.next; swap2.next=swap1; point=swap1; } returndummy.next; }
时间复杂度:O(n)。
空间复杂度:O(1)。
总
自己开始没有想出递归的算法,每次都会被递归的简洁吸引。另外,感觉链表的一些题,只要画图打打草稿,搞清指向关系,一般不难。