给定一个链表,交换每两个相邻节点并返回其头部。

来源:互联网 发布:网络版权保护 编辑:程序博客网 时间:2024/05/29 18:53

本题源自leetcode 24

----------------------------------------------------------------------

思路1: 创建一个头节点。然后从头结点之后开始遍历,每次翻转俩个节点,并保留前驱指针。最后返回头结点的下一个节点。

思路2: 用一个指针的指针来保留第一个节点。每次交换完,把双指针节点更新为下一次要交换的第一个节点。

代码:

 ListNode* swapPairs(ListNode* head) {        /*        if(head==NULL||head->next==NULL)            return head;        ListNode* root=new ListNode(0);        root->next=head;        ListNode* pre=root;        ListNode* p=head;        ListNode* pNext=NULL;                while(p&&p->next!=NULL){            pNext=p->next;            p->next=pNext->next;            pNext->next=pre->next;            pre->next=pNext;            pre=p;            p=p->next;        }        return root->next;        */        if(!head || !head->next)            return head;        ListNode** p=&head;        ListNode*a,*b;                while((a=*p)&&(b=a->next)){            a->next=b->next;            b->next=a;            *p=b;            p=&(a->next);        }        return head;    }


阅读全文
0 0