自己要学的东西还多着呢
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定1->2->3->4
, 你应该返回2->1->4->3
.
说明:
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换
/*思路比较清晰,
就是每次跳两个节点,
后一个接到前面,
前一个接到后一个的后面,
最后现在的后一个(也就是原来的前一个)接到下下个结点(如果没有则接到下一个)。
*/
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null)
return null;
ListNode helper = new ListNode(0);//辅助节点,意为头结点
helper.next = head;//辅助及节点在head节点之前
ListNode pre = helper;//辅助节点赋予上一个节点
ListNode cur = head;//当前节点
while(cur!=null && cur.next!=null)//当当前节点和当前节点的下一个节点不为空的时候
{
ListNode next = cur.next.next;//当前节点的下一个节点的next指向为下一个节点
cur.next.next = cur;//把当前节点的下一个节点的next指向当前节点
pre.next = cur.next;//把上一个节点的next指向当前节点的下一个节点
if(next!=null && next.next!=null)//判断后面是否还有两两相邻的节点
cur.next = next.next;//next的下一个节点指向节点赋给当前节点的next
else
cur.next = next;//否则,next节点赋给当前节点的next
pre = cur;//把当前节点变成前节点
cur = next;//把next节点,变成当前节点
}
return helper.next;//返回当前节点
}
}