问题描述:
给一个链表,两两交换其中的节点,然后返回交换后的链表。
实现思路:
当两个链表均不为空时,初始时,定义两个指针p和q分别指向head,和head->next,交换它们的值。然后两个指针分别往后移动一位。当链表的长度为偶数时,直接break。当链表的长度为奇数时,即q==NULL,跳出while循环。
代码:
/**
* 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
if (head == NULL) return head;
int a, b;
ListNode *p, *q;
p= head;
q = p->next;
while (p!= NULL&&q != NULL) {
a = q->val;
q->val = p->val;
p->val = a;
p = q->next;
if(p == NULL) break;
q = p->next;
}
return head;
}
};
感想:
考虑链表为奇数和偶数两种情况,当链表为偶数时,判断 if(p == NULL) break;当链表为奇数时,q = p->next自动为空,跳出循环。