您的位置:首页 > 其它

两两交换链表中的节点

2017-03-31 17:39 465 查看
问题描述:
给一个链表,两两交换其中的节点,然后返回交换后的链表。
样例
给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。
解题思路:
处理空表和只有一个节点的特殊情况(直接输出),新建一个链表,建立q、k两个指针,进行交换,在这过程中要处理节点总数是单数的情况(此时不必交换)。
程序代码:
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */

4000
class Solution {
public:
    /**
     * @param head a ListNode
     * @return a ListNode
     */
    ListNode* swapPairs(ListNode* head) {
         /* if(head==NULL||head->next==NULL) return head;
        ListNode *p=new ListNode(0);
        p->next=head;
        head=p;
        ListNode *q=head->next;
        ListNode *k=q->next;
        while(k!=NULL){
           
            q->next=k->next;
            k->next=q;
            p->next=k;
            p=q;
            if(q->next==NULL){
                q=NULL;
                k=NULL;
            }else{
                q=q->next;
                k=q->next;
            }
        }
        head=head->next;
        return head; */

if(head ==NULL|| head->next ==NULL)

           return head;   

        ListNode *p = new ListNode(0);

            p->next = head;

        ListNode *r = p;

        while(p->next != NULL &&p->next->next != NULL){  

            ListNode *a =p->next;

            ListNode *b = p->next->next;

            a->next=b->next;  

            b->next =a;  

            p->next =b;  

              

           p= p->next->next;  

        }  

          

        return r->next; 

// Write your code here

    }
};
感想:
要全面考虑每一种情况,特别是节点数为奇数的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: