题目来自LeetCode。
题目描述:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3。
贴代码:
struct ListNode* swapPairs(struct ListNode* head) {
struct ListNode *pHead, *p, *q;
int i = 0;
if (head == NULL || head->next == NULL)
{
return head;
}
pHead = (struct ListNode*)malloc(sizeof(struct ListNode));
pHead->next = head;
p = pHead;
q = p->next;
for (i = 0; ; i++)
{
p->next = q->next;
q->next = q->next->next;
p->next->next = q;
q = p->next;
p = p->next->next;
q = q->next->next;
if (q == NULL)
{
break;
}
if (q->next == NULL)
{
break;
}
}
return pHead->next;
}