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.
Subscribe to see which companies asked this question
解题思路: 就是连续跳两个节点,在跳之前,先交换前后两个节点。如果遇到奇数个节点,需要判断下跳是否存在,如果不存在就 break退出。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head == NULL || head->next == NULL)
return head;
ListNode *ptr = head;
while(ptr != NULL)
{
if(ptr->next == NULL)
break;
int tmp = ptr->val;
ptr->val = ptr->next->val;
ptr->next->val = tmp;
ptr = ptr->next->next;
}
return head;
}
};