Leetcode-24. 两两交换链表中的节点
1.题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
我的想法是,用两个指针n2,n3指向需要转换的两个节点,然后n1,n4指向转换的两个节点的前一个结点和后一个结点
循环进行n2和n3的转换
代码如下:
if (head == null || head.next == null) {
return head;
}
ListNode n1, n2, n3, n4;
n1 = null;
n2 = head;
n3 = n2.next;
head = n3;
n4 = n3.next;
while (n3 != null) {
n3.next = n2;
n2.next = n4;
if (n1 != null) {
n1.next = n3;
}
if (n4 != null && n4.next != null) {
n1 = n2;
n2 = n4;
n3 = n4.next;
if (n3 != null) {
n4 = n3.next;
}
} else {
break;
}
}
return head;
}
总结
1.链表为空和只有一个可以直接返回head的情况
2.转换两个结点后,他的前一个结点和后一个结点应该是什么需要搞清楚
3.最后跳出循环时,指针出现空的情况就不能有next