24. Swap Nodes in Pairs
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 changed.
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* dummyNode=new ListNode(0);
dummyNode->next=head;
ListNode* p=dummyNode;
while(p->next && p->next->next){
ListNode* node1=p->next;
ListNode* node2=node1->next;
ListNode* next=node2->next;
node1->next=next;
node2->next=node1;
p->next=node2;
p=node1;//注意这里,要以交换后的位置为准
}
ListNode* retNode=dummyNode->next;
delete dummyNode;
return retNode;
}
};
class Test{
public:
void test(){
int arr[]={0, 1, 3, 2, 5, 4};
int n=sizeof(arr)/ sizeof(int);
ListNode* head=createLinkedList(arr, n);
printLinkedList(head);
ListNode* head2=Solution().swapPairs(head);
printLinkedList(head2);
deleteLinkedList(head2);
}
};
本文介绍了一种链表操作算法——成对交换相邻节点的方法,并提供了完整的C++实现代码。该算法仅使用常数空间,通过对链表节点进行重新连接而非修改节点值的方式实现了节点的交换。

178

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



