您的位置:首页 > 其它

两两交换链表中的节点

2017-03-26 21:59 330 查看

问题描述:

给一个链表,两两交换其中的节点,然后返回交换后的链表。

样例:

给出 
1->2->3->4
,
你应该返回的链表是 
2->1->4->3


实现思路:

首先这个链表只能交换偶数个数据,如果有奇数个数据则最后一个数据不进行交换。做一个循环将数据两个两个的交换,每交换完一次都要往后迭代。

实现代码:

/**

 * 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 || head->next== NULL)return head;//判断链表为空或者只有一个数据

         ListNode *p;

         ListNode *q;

         p= head;

         q= p->next;

         int a;

        while (q!= NULL &&p!= NULL) {

            a= p->val;

            p->val= q->val;

            q->val= a;

             if (q->next== NULL)break;//判断后面是否还有元素

            p= q->next;

            if (p->next== NULL)break;//判断后面的元素是否只剩下一个

            q= p->next;

        }

        return head;

    }

};

感想:

原本想的是直接将链表两两交换,但是 这个太麻烦而且得需要好几个指针储备,但是如果不动链表顺序的话只能就交换数据,这样就会显得方便而且算法比较简单。但是在实现过程经常漏掉细节,譬如循环里面的判断语句没有的话就是出现runtime error 这个错误,如果链表后面明明没有数据,但是偏偏要用后面的数据,这样就是就会出错。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: