Leetcode之两两交换链表中的节点

题目描述

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

思路

双指针法,一个指向奇数节点,一个指向偶数节点,定义一个新的链表,按照先偶后奇的顺序逐个插入(利用count来计数当前要插入奇数还是偶数)。需要注意的是,当两个指针都为NULL之后才终止

代码

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        if(head == NULL)
            return NULL;
        if(head->next == NULL)
            return head;
        ListNode* p1 = head;
        ListNode* p2 = head->next;
        ListNode* res_head = new ListNode(0);
        ListNode* cur = res_head;
        int count = 0;
        while (p1 != NULL || p2 != NULL)
        {
            if (count % 2 == 0)
            {
                if (p2)
                {
                    ListNode* next = new ListNode(p2->val);
                    cur->next = next;
                    cur = cur->next;
                    if (p2->next)
                        p2 = p2->next->next;
                    else
                        p2 = NULL;
                }
            }
            else
            {
                if (p1)
                {
                    ListNode* next = new ListNode(p1->val);
                    cur->next = next;
                    cur = cur->next;
                    if (p1->next)
                        p1 = p1->next->next;
                    else
                        p1 = NULL;
                }
            }
            count++;
        }
        return res_head->next;
    }
};
发布了90 篇原创文章 · 获赞 0 · 访问量 1292
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览