leetcode第24题两两交换链表中的节点
第一种方式:递归
- 说起来也就离谱,我感觉饿递归真的好难啊!函数调用栈和返回值总是弄混,真的不知道该怎么
- 但是这个题的思路还是蛮清晰的,
- 假设链表为1->2->3->4
- 第一次传入的是 head = 1; next = 2;
- 然后往后跑 head = 3 next= 4;
- 再继续往下走位空 返回的 swaPairs = null;
- 3.next = null 4,next = 3; return = 4;
- 1.next = 4;2,next = 1;
- return = 2 最后的链表就为 2 -> 1- >3 -> 4
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null){
return head;
}
ListNode next = head.next;
head.next = swapPairs(next.next);
next.next = head;
return next;
}
}
第二种方式:非递归
- 其实和第一种思路差不多,但是不同的点在于这个是从前往后跑的
- 定义的指针,对指针进行操作 .
class Solution {
public ListNode swapPairs(ListNode head) { //这种是非递归的方法,反正我是想不出来
ListNode pre = new ListNode(0);
pre.next = head;
ListNode temp = pre;
while (temp.next != null && temp.next.next != null) {
ListNode start = temp.next;
ListNode end = temp.next.next;
//进行指向的变换
temp.next = end;
start.next = end.next;
end.next = start;//这里其实就接上了
// 对指针进行重新指向
temp = start;
}
return pre.next;
}
}