博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode-24. Swap Nodes in Pairs
阅读量:5368 次
发布时间:2019-06-15

本文共 1302 字,大约阅读时间需要 4 分钟。

一、问题描述

  给定一个链表,要求换他们的一对值,要求空间复杂度是常量,不能更改链表节点的值,只能更改指针。

  例子:给定一个链表,如1->2->3->4,应该返回2->1->4->3。

二、问题解决

  看到题目大概都能明白怎么去解,关键是如何转化成简单的代码描述。复习一定看一看代码,代码中,为了减去判断头节点是否空、整个链表是否为空使用了一种简单的描述方式,可以学习:

while ((a = *pp) && (b = a->next))

  下面是整个代码,使用了指向指针的指针来解决这个问题。还可以方式第一次交换时第一个节点没有前结点的问题(这个问题还可以参考21题新建一个头节点的解决方案)

ListNode* swapPairs(ListNode* head) {    ListNode **pp = &head, *a, *b;    while ((a = *pp) && (b = a->next)) {        a->next = b->next;        b->next = a;        *pp = b;        pp = &(a->next);    }    return head;}int main(){    ListNode node1(1);    ListNode node2(2);    ListNode node3(3);    ListNode node4(4);    ListNode* list1 = &node1;    node1.next = &node2;    node2.next = &node3;    node3.next = &node4;    ListNode* ii = swapPairs(list1);    while (ii != NULL) {        cout << ii->val << endl;        ii = ii->next;    }    system("pause");    return 0;}

  下面是不使用指向指针的指针,而是新建一个头节点的解决方式(同样,在代码中判断下两个节点是否都存在,使用while条件的语句简化):

ListNode* swapPairs(ListNode* head) {    ListNode f(-1);    f.next = head;    ListNode *p = &f;    ListNode *a = head;    ListNode *b;    while (a && a->next) {        b = a->next;        a->next = b->next;        b->next = a;        p->next = b;        p = a;        a = p->next;    }    return f.next;}

 

转载于:https://www.cnblogs.com/likaiming/p/8302823.html

你可能感兴趣的文章
用LR12录制app,用LR11跑场景,无并发数限制,已试验过,可行!
查看>>
python 多线程就这么简单(转)
查看>>
oracle 简述
查看>>
ajax如何向后台传递数组,在后台该如何接收的问题(项目积累)
查看>>
Solr之java实现增删查操作
查看>>
httpClient连接工具类实测可用
查看>>
CDOJ 1965 连通域统计【DFS】
查看>>
飞机大战3-我的飞机
查看>>
c#接口
查看>>
MyEclipse部署Jboss出现java.lang.OutOfMemoryError: PermGen space
查看>>
ZOJ 1133
查看>>
alibaba / zeus 安装 图解
查看>>
Planned Delivery Time as Work Days (SCN discussion)
查看>>
Ubuntu:让桌面显示回收站
查看>>
Android上传头像代码,相机,相册,裁剪
查看>>
git 安装体验
查看>>
Oracle 给已创建的表增加自增长列
查看>>
《DSP using MATLAB》Problem 2.17
查看>>
if 循环
查看>>
uva 111 History Grading(lcs)
查看>>