24. Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list's nodes, only nodes itself may be changed.
Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.
解题思路:
/*
执行用时 : 0 ms, 在Swap Nodes in Pairs的C提交中击败了100.00% 的用户
内存消耗 : 7 MB, 在Swap Nodes in Pairs的C提交中击败了92.59% 的用户
*/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* swapPairs(struct ListNode* head){
//考虑特殊情况
if(head == NULL || head->next == NULL){
return head;
}
//新增加一个空的头结点
struct ListNode* L = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *tail = L;//tail指向已交换区的尾节点
struct ListNode* pFirst = head;//pFirst指向待交换的第一个结点,第二个时pFirst->next;
while(pFirst && pFirst->next){//链表长度为奇数或偶数都加以考虑
tail->next = pFirst->next;//将第二个结点交换
tail = tail->next;//tail重新指向已交换区的尾节点
pFirst->next = tail->next;//链接后面未处理的结点,保持链表完整性
tail->next = pFirst;//将第一个结点交换
tail = tail->next;//tail重新指向已交换区的尾节点
pFirst = pFirst->next;//处理下一个节点
}
return L->next;
}