链表就地逆置和合并
来源:互联网 发布:python opencv配置 编辑:程序博客网 时间:2024/05/01 09:46
题目说明:
(1)单链表就地逆置
(2)合并链表
问题一分析:
逆置后的点链表初始为空,表中的节点不是新生成的,而是从原链表当中一次“删除”,再逐个头插到逆置表中。设逆置链表的初始态为空表,“删除”已知链表中的第一个节点,然后将它“插入”到逆置链表的“表头”,即使得他成为逆置链表中“新”的第一个节点,如此循环,直至原链表为空。
假设有如下数据结构:
- #define ElemType char
- typedef struct Node{
- ElemType data;
- struct Node *next;
- }Node,*LinkList;
- 代码如下:
- void ReverseList(LinkList L)
- {
- Node *p,*q;
- p = L->next; /*p为原链表的当前处理节点*/
- L->next = NULL; /*逆置单链表初始为空*/
-
- while(p != NULL){ /*当原链表未处理完*/
- q = p->next; /*q指针保留原链表当前处理节点的下一个节点*/
- p->next = L->next; /*将当前处理节点p插入到逆置L的表头*/
- L->next = p;
- p = q; /*p指向下一个待插入的节点*/
- }
- }
同时给出头插法建立链表的代码:
- void CreatList(LinkList L)
- {
- Node *s;
- char c;
- int flag = 1;
- while(flag){
- c = getchar();
- if(c != '$'){
- s = (Node*)malloc(sizeof(Node));
- s->data = c;
- s->next = L->next;
- L->next = s;
- }else
- flag = 0;
- }
- }
问题二:合并链表
//保持有序的合并
Node* merge(Node* h1, Node* h2)
{
if (h1 == NULL) return h2;
if (h2 == NULL) return h1;
Node* head;
if (h1->data > h2->data)
{
head = h2; h2 = h2->next;
}
else
{
head = h1; h1 = h1->next;
}
Node* current = head;
while (h1 != NULL||h2 != NULL)
{
if (h1 == NULL || (h2 != NULL&&h1->data > h2->data))
{
current->next = h2;
h2 = h2->next;
current = current->next;
}
else
{
current->next = h1;
h1 = h1->next;
current = current->next;
}
}
current->next = NULL;
return head;
}
0 0
- 链表就地逆置和合并
- 链表就地逆置
- 链表就地逆置
- 链表就地逆置
- 链表就地逆置
- 链表的就地逆置
- 单向循环链表就地逆置
- 24. 链表就地逆置
- 线性表---就地逆置
- 实验二、3链表的就地逆置
- 24.链表操作,单链表就地逆置
- Q24、(链表):链表操作,单链表就地逆置
- 双向循环链表(插入,删除,就地逆置)
- 链表的就地逆置(递归+非递归)
- 24 单链表就地逆置,合并链表
- DS之链表实现就地逆置
- 链表之带头结点的单链表就地逆置
- 对两个链表的排序和合并
- C语言学习记录
- P123.29
- Openwrt /lib/functions/uci-default.sh
- acdream 1738 世风日下的哗啦啦族I
- Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
- 链表就地逆置和合并
- Android网络之数据解析----SAX方式解析XML数据
- android高效模拟器Genymotion
- 【Android开源】Gson和Jackson的简单比较
- 《PHP扩展开发及内核应用》目录
- HTML CSS基础--浮动
- Java构造方法&数据类型(5.21)
- gcc 之 inline
- web编程曾写代码