http://www.2cto.com/kf/201310/251331.html
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be change
//24. Swap Nodes in Pairs (copy)
public static ListNode swapPairs(ListNode head)
{
if(head == null){
return null;
}
// 当只有一个元素的情况
if(head.next == null){
return head;
}
ListNode i = head; // i指向第1个
ListNode j = i.next; // j指向第2个
ListNode k = j.next; // k指向第3个
head = head.next;
while(j != null){
j.next = i;
if(k!=null && k.next!=null){ // 当有偶数个节点
i.next = k.next;
}else{ // 当有奇数个节点
i.next = k;
}
// 更新i,j,k的值,前进两格
i = k;
if(k != null){
j = k.next;
}else{
j = null;
}
if(k!=null && k.next!=null){
k = k.next.next;
}else{
k = null;
}
}
return head;
}
本文介绍了一种算法,该算法能在常数空间内将链表中的每两个相邻节点进行交换,并返回修改后的链表头部。例如,对于链表1->2->3->4,经过该算法处理后会变成2->1->4->3。文章提供了具体的实现代码。
572

被折叠的 条评论
为什么被折叠?



