【LeetCode】24. Swap Nodes in Pairs

来源:互联网 发布:win7 64位优化版下载 编辑:程序博客网 时间:2024/06/07 00:13

题目描述

Given a linked list, swap every two adjacent nodes and return its head.

For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

解题思路

以下提供两种解题思路:

  1. 虽然每次交换的是两个节点,但实际上还需要记录前一个节点的父节点,这样才能确保交换后的链接能够保持连续。所以,可以在链表前加一个dummy节点。顺序遍历整个链表,使用一个cnt来记录是否需要进行交换,直接模拟链表的交换过程即可。
  2. 每两个节点的交换操作其实都是相同的,所以可以使用递归求解。

AC代码

  • 解法一
/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* swapPairs(ListNode* head) {        ListNode* cur = head;        ListNode* prev;        ListNode dummy(-1);        ListNode* first = &dummy;        first->next = head;        int cnt = 0;        while (cur != NULL) {            // odd number, swap and update            if (cnt & 1) {                //swap                prev->next = cur->next;                cur->next = prev;                first->next = cur;                //update                 first = prev;                cur = prev->next;            } else {                prev = cur;                cur = cur->next;            }            cnt++;        }        return dummy.next;    }};
  • 解法二
public ListNode swapPairs(ListNode head) {        if (head == null || head.next == null) {            return head;        }        ListNode newhd = head.next;        head.next = swapPairs(newhd.next);        newhd.next = head;        return newhd;}
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 20岁走路内八字怎么办 9岁儿童脚内八字怎么办 5岁宝宝脚内八字怎么办 一岁宝宝内八字怎么办 两人八字合不合怎么办 考到不好的大学怎么办 考的大学不理想怎么办 只考上二本大学怎么办 w7电脑中病毒了怎么办 电脑中病毒了该怎么办 泰迪呼吸急促怎么办啊 狗狗呼吸急促是怎么办 狗狗着凉了呕吐怎么办 狗鼻子流黄鼻涕怎么办 刚出生婴儿睡觉不踏实怎么办 有人溺水后你该怎么办 借钱不还怎么办没欠条 私人欠货款不还怎么办 公司欠货款不还怎么办 两个人离婚一方不同意怎么办 比亚迪l3油耗高怎么办 u盘密码忘记了怎么办 主板没有m.2接口怎么办 点痣留下了疤怎么办 危险三角区长痘痘怎么办 挤了危险三角区怎么办 三角区长痘挤了怎么办 三角区发红长痘怎么办 激光祛斑碰水了怎么办 激光打痣留下坑怎么办 点痣之后留下坑怎么办 去痣留下的红印怎么办 激光点痦子留疤怎么办 激光点痣的疤痕怎么办 做完眉毛碰水了怎么办 脸上疤掉了有坑怎么办 结痂不小心抠掉怎么办 脸上肉松弛怎么办19岁 点痣留下来的疤怎么办 激光祛斑的红印怎么办 脸上疤掉了红印怎么办