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) {
		if (!head)
			return NULL;
		ListNode *addHead = new ListNode(-1);
		addHead->next = head;
		ListNode *first = head, *second = head->next,*preSwap = addHead;
		while (second)
		{
			preSwap->next = second;
			first->next = second->next;
			second->next = first;
			preSwap = first;
			first = first->next;
			if (!first)
				break;
			second = first->next;
		}
		return addHead->next;
	}
};


你可能感兴趣的:(LeetCode)