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(NULL == head) return head;
    	ListNode *pre,*p,*q;
		pre = NULL; p = head; q = head->next;
		int i = 0;
		while(q){
			if(i%2 == 0){
    			if(pre == NULL){
					pre = q;
					head = q;
				}else
				     pre->next = q;     
				p->next = q->next;
				q->next = p;
			    // move to the next;
                i = 0;
				q = p->next;
			    i++;
			}else{
				pre = p;
				p = q;
				q = q->next;
				i++;
			}
		}
		return head;
    }
};

  

原文地址:https://www.cnblogs.com/graph/p/3256564.html