Leetcode: 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.

/**
 * 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) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if(head == NULL)return head;
    	ListNode* p1 = head;
		ListNode* p2 = head->next;
		ListNode* tmp = NULL;
		if(p2!= NULL)head = p2;
		else return head;
		ListNode* last = NULL;
		while(p1!=NULL && p2 != NULL)
		{
			if(last != NULL)
				last->next = p2;
			tmp = p2->next;
			p1->next = tmp;
			p2->next = p1;

			last = p1;

			p1 = tmp;
			if(p1 != NULL)
				p2 = p1->next;
			else
				break;
		}
		return head;
    }
};


你可能感兴趣的:(LeetCode,list,swap,in,nodes,pairs)