数据结构—头插法逆转单链表——空间复杂度为O(1)
#if 1
#include<stdio.h>
#include<stdlib.h>
#include<iostream> using namespace std; struct Node
{
int data;
Node *next;
}; //初始化
Node *init()
{
Node *head=new Node;
head->next=NULL;
return head;
} //头插法创建节点
void insetList(Node *head,int i)
{
Node *cur=new Node; cur->data=i; cur->next=head->next;
head->next=cur;
} //链表A生成
void CreateList(Node *head_A)
{
for(int i=-8;i<10;i++)
{ insetList(head_A,++i);
}
} //打印链表
void print(Node *head)
{
Node *temp=head->next; //防止头指针移动
while(temp)
{
cout<<temp->data<<" ";
temp=temp->next; }
} //拆分链表A,链表C源于A。生成链表B
void ReversalList(Node *head_A,Node *List_C)
{
Node *pa=head_A->next; //pa指向链表A的首元节点,作为逆转尾节点,可以省略pa Node *pb=pa->next; //pb指针指向pa后继节点,为移动指针 pa->next=NULL; //此处---首元节点置空 Node *pc=pb; //pc存放pb后继节点,为移动指针 while(pb) //!!!退出条件为最后一个节点头插入第一个节点,在插入之前将NULL给了pc,然后改变pb的指针域
{
pc=pb->next; //pc指向pb后继 pb->next=head_A->next; //pb作为新节点用头插法插入首元节点之前 head_A->next=pb; //头节点指向新插入的pb节点 pb=pc; //pb指向原来pb节点的后继开始循环 } }
void main()
{
Node *head_A=init(); //链表A初始化头节点 //链表C初始化,结构体指针记得初始化头节点
Node *List_C=head_A; // //创建链表A
CreateList(head_A); //打印链表A
cout<<"链表A为:"<<endl;
print(head_A);
cout<<endl; //调用函数逆转链表A
ReversalList(head_A,List_C); //打印链表C
cout<<endl<<"逆转链表List_C为:"<<endl;
print(List_C);
cout<<endl; system("pause"); }
#endif /*
总结:
循环退出条件为最后一个节点头插入第一个节点,在插入之前将尾节点NULL给了pc,pc再给pb,然后改变pb的指针域;
头指针head是作为头插法不能改变的指针,可以设一个临时结构体指针指向源链表首元节点(pa),也可以省略;
头插法的新节点为pb,pb将下一个节点的地址交给pc后,pb相当于一个独立节点,由于循环机制,在插入后需要重置pb指针位置;
该算法共新建三个指针,其中两个为移动指针;
*/
数据结构—头插法逆转单链表——空间复杂度为O(1)的更多相关文章
- C++练习 | 不使用头插法逆转单链表
void D(PBook pHead) { PBook p,q,s; p=pHead->next->next; q=p->next; s=q->next; pHead-> ...
- 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)
数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...
- 数据结构之 线性表---单链表操作A (删除链表中的指定元素)
数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...
- 6. Reverse Linked List 逆转单链表
逆转单链表,比较简单,不细讲,扫描依次改变指针指向. class Solution { public: ListNode* reverseList(ListNode* head) { if(head= ...
- Java数据结构-线性表之单链表LinkedList
线性表的链式存储结构,也称之为链式表,链表:链表的存储单元能够连续也能够不连续. 链表中的节点包括数据域和指针域.数据域为存储数据元素信息的域,指针域为存储直接后继位置(一般称为指针)的域. 注意一个 ...
- 《数据结构》2.3单链表(single linked list)
//单链表节点的定义 typedef struct node { datatype data; struct node *next; }LNode,*LinkList; //LNode是节点类型,Li ...
- 【数据结构与算法】单链表操作(C++)
#include <stdio.h> #include <malloc.h> /*单链表节点定义*/ typedef struct LNode { int data; //da ...
- 【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)
所实现的循环单链表的结构例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill ...
- C:数据结构与算法之单链表
单链表相对于顺序表比较难理解,但是比较实用,单链表的插入,删除不需要移动数据元素,只需要一个指针来寻找所需要的元素,还有一个大优点就是不浪费空间,当你想要增加一个结点可以申请(malloc())一个结 ...
随机推荐
- PHP随机生成要求位数个字符(大小写字母+数字)
php随机生成要求位数个字符 /** * 随机生成要求位数个字符 * @param length 规定几位字符 */ function getRandChar($length){ $str = nul ...
- Cognos无法解密来着内容库的用户名和密码凭证
1. 问题描述 启动Cognos失败,报错代码为QE-DEF-0368. 2. 问题分析 Frame Work和Cognos Server安装在不同的目录和/或不同的机器上. 3. 解决方案 需要把S ...
- 查看JVM内存使用状况
1.jps:查看本地正在运行的java进程和进程ID(pid) 2.jinfo pid,查看指定pid的所有JVM信息 1)jinfo -flags pid 查询虚拟机运行参数信息. 2)jinfo ...
- tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决
现象: tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig() ...
- GIT 初始化 中文编码、自动换行
解决中文编码: git config --global core.quotepath false git config --global gui.encoding utf-8 解决git log 中文 ...
- python之路-----前端之html协议一
一.概述 1.1 什么是html语句? 超文本标记语言(Hypertext Markup Language,HTML)通过标签语言来标记要显示的网页中的各个部分.一套规则,浏览器认识的规则 浏览器按顺 ...
- css继承属性
在css中我们经常会遇到一些子元素继承父元素的情况 , 有时候不清楚有哪些属性会继承, 在开发中会给我们带来一些麻烦 ,稍作整理还是很有必要. 一.有继承性的属性 1.字体系列属性 font:组合字体 ...
- 页面中直接显示FTP中的图片
页面中直接显示FTP中的图片 FTP根目录下有一张图片,如下 第一步: 通过如下格式,在浏览器上输入路径,确定可看到图片 ftp://root:root@127.0.0.1/111.png ftp:/ ...
- Mybatis面试题
面试题示例 1.JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的? 1)数据库链接创建.释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题. 解决:在SqlMap ...
- [Leetcode 216]求给定和的数集合 Combination Sum III
[题目] Find all possible combinations of k numbers that add up to a number n, given that only numbers ...