LeetCode | Swap Nodes in Pairs(将链表中的元素两两交换)
来源:互联网 发布:手机视频恢复软件 编辑:程序博客网 时间:2024/06/02 05:55
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.
题目就是将链表中的结点两两反转。其实实现很简单,设置三个指针,q和m是要交换的结点指针,p是q的父节点,用来让父节点指针指向新的子节点m。
实现中要考虑输入head为空、只有一个结点这两种情况。然后只有两个结点的情况也要单独处理,因为这影响到了头结点指针的指向。我在实现时没有设置头结点,如果设置了头结点,就能将只有两个结点的情况,合并到后面的程序当中。
实现比较简单, 代码如下:
#include <stdio.h>#include <stdlib.h>typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;void CreateList(LinkList *head,int n);void SwapNodes(LinkList *head);int IsTwo(LinkList head);void PrintList(LinkList head);void DestoryList(LinkList *head);int main(){ LinkList head = NULL; int n; while(scanf("%d",&n) != EOF){ CreateList(&head,n); PrintList(head); SwapNodes(&head); PrintList(head); DestoryList(&head); } return 0;}void CreateList(LinkList *head,int n){ int data; for(int i = 0;i < n;++i){ LinkList p = (LinkList)malloc(sizeof(LNode)); if(!p){ printf("malloc error!\n"); exit(1); } scanf("%d",&data); p->data = data; p->next = (*head); *head = p; }}void SwapNodes(LinkList *head){ LinkList p,q,m; if(*head == NULL){ printf("NULL!\n"); return ; } if((*head)->next == NULL) return ; p = (*head)->next; //处理头指针情况,如果设置头结点,就不用这么麻烦了 q = p->next; (*head)->next = q; p->next = *head; *head = p; p = (*head)->next; while(IsTwo(p)){ q = p->next; m = q->next; q->next = m->next; m->next = q; p->next = m; p = q; }}int IsTwo(LinkList head){ if(head->next == NULL || head->next->next == NULL) return 0; return 1;}void PrintList(LinkList head){ LinkList p = head; while(p){ printf("%d ",p->data); p = p->next; } printf("\n");}void DestoryList(LinkList *head){ if(*head == NULL) return ; LinkList p = *head; *head = NULL; while(p){ LinkList q = p->next; free(p); p = q; }}
1 0
- LeetCode | Swap Nodes in Pairs(将链表中的元素两两交换)
- LeetCode-------24. Swap Nodes in Pairs(两两交换)
- 451.Swap Nodes in Pairs-两两交换链表中的节点(容易题)
- 【LeetCode】011 Swap Nodes in Pairs 两两换位
- [LeetCode]Swap Nodes in Pairs 成对交换
- [LeetCode]Swap Nodes in Pairs 交换节点
- LeetCode 24. Swap Nodes in Pairs(交换节点)
- LeetCode 24 Swap Nodes in Pairs(交换序列中的结点)(Linked List)
- 【leetcode】24. Swap Nodes in Pairs - 成对交换链表元素
- 交换单链表中相邻的两个元素 Swap Nodes in Pairs
- LeetCode(24) Swap Nodes in Pairs
- LeetCode (24)Swap Nodes in Pairs
- Swap Nodes in Pairs 链表两两交换节点@LeetCode
- LeetCode-24 Swap Nodes in Pairs(链表中按要求交换节点)
- (LeetCode)Swap Nodes in Pairs --- 交换两个相邻的结点
- LeetCode 24. Swap Nodes in Pairs ***** 双节点交换
- [LeetCode] Swap Nodes in Pairs(成对交换节点)
- Leetcode:Swap Nodes in Pairs 单链表相邻两节点逆置
- IO(输入输出流)
- Hashset删除部分数据
- 静态数组的索引越界问题
- 初次见面
- 浅谈HTTP中Get与Post的区别
- LeetCode | Swap Nodes in Pairs(将链表中的元素两两交换)
- 数据库学习13-触发器
- netlink学习笔记(一)
- GPT HDD识别
- ubuntu 安装Zend Studo 后不能安装插件
- 数据库学习14-回顾
- Hibernate二级缓存详解
- 替换文件中指定内容
- CRC校验