问题描述:
给一个链表,两两交换其中的节点,然后返回交换后的链表。
样例
给出 1->2->3->4
, 你应该返回的链表是 2->1->4->3
。
解题思路:建立两个相邻的指针h1,h2,一个在前一个在后,临时数值t保存h1的元素,完成相邻元素的交换。
代码实现:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/**
* @param head a ListNode
* @return a ListNode
*/
ListNode* swapPairs(ListNode* head) {
// Write your code here
ListNode *h1=head;
ListNode *h2=h1->next;
if(h1==NULL) return NULL;
while(h1!=NULL&&h2!=NULL){
int t=h1->val;
h1->val=h2->val;
h2->val=t;//交换元素;
if(h2->next==NULL) break;//链表中只剩下一个元素时,跳出循环;
h1=h2->next;//否则h1移到h2的前面;
if(h1->next==NULL) break;//到达链表尾部时,跳出循环;
h2=h1->next;//否则h2移到移动后的h1的前面;
}
return head;
}
};
解题感悟:
指针的位置移动是难点,判断链表指针是否到达链表尾部和指针的位置变换要写正确。