#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)的更多相关文章

  1. C++练习 | 不使用头插法逆转单链表

    void D(PBook pHead) { PBook p,q,s; p=pHead->next->next; q=p->next; s=q->next; pHead-> ...

  2. 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)

    数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...

  3. 数据结构之 线性表---单链表操作A (删除链表中的指定元素)

    数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...

  4. 6. Reverse Linked List 逆转单链表

    逆转单链表,比较简单,不细讲,扫描依次改变指针指向. class Solution { public: ListNode* reverseList(ListNode* head) { if(head= ...

  5. Java数据结构-线性表之单链表LinkedList

    线性表的链式存储结构,也称之为链式表,链表:链表的存储单元能够连续也能够不连续. 链表中的节点包括数据域和指针域.数据域为存储数据元素信息的域,指针域为存储直接后继位置(一般称为指针)的域. 注意一个 ...

  6. 《数据结构》2.3单链表(single linked list)

    //单链表节点的定义 typedef struct node { datatype data; struct node *next; }LNode,*LinkList; //LNode是节点类型,Li ...

  7. 【数据结构与算法】单链表操作(C++)

    #include <stdio.h> #include <malloc.h> /*单链表节点定义*/ typedef struct LNode { int data; //da ...

  8. 【c++版数据结构】之循环单链表的实现(带头结点以及尾节点)

    所实现的循环单链表的结构例如以下图所看到的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill ...

  9. C:数据结构与算法之单链表

    单链表相对于顺序表比较难理解,但是比较实用,单链表的插入,删除不需要移动数据元素,只需要一个指针来寻找所需要的元素,还有一个大优点就是不浪费空间,当你想要增加一个结点可以申请(malloc())一个结 ...

随机推荐

  1. C# WPF开发之MVVM模式开发

    MVVM模式由Model,View,ViewModel三部分组成. Model需继承INotifyPropertyChange(属性修改通知) ViewModel负责业务逻辑,连接View和Model ...

  2. Vue.js错误: Maximum call stack size exceeded

    这几天正自学Vue, 用eggjs + vue 采用前后分离,写一个网站练练手. 增加了一个商品详情页 Detail.vue的时候,点击进入Detail.vue的时候,页面显示空白,打开浏览器调试工具 ...

  3. newcoder-最长树链-树/gcd

    https://ac.nowcoder.com/acm/problem/13233 链接:https://ac.nowcoder.com/acm/problem/13233来源:牛客网 题目描述 树链 ...

  4. lr_场景设计之组场景、nmon监控

    1.组场景常用于回归 ,可以设置成一个脚本后多久运行下一个脚本: Real-world Schedule和Basic schedule的区别:根据官方文档,这两种模式下,场景中的每个虚拟用户组(可看成 ...

  5. 面试北京XX数通总结

    软件架构师何志丹 1             总括 1.1     面试时间 2019年1月21号. 1.2     公司概况 员工近20人,其中开发人员6人,全部objectarx(C++),全部老 ...

  6. java根据输入的字符串和字节数来截取,输出对应字节数的字符串

    public class Test { //要进行截取操作的字符串 static String ss; //截取的字符串的字节数 static int n; public static void ma ...

  7. win10 adb(Android Debug Bridge)导出日志

    百度了一下 各种设置环境变量.放到system32文件夹(64位系♂统放到C:\Windows\SysWOW64)等 公司电脑win10系统 方便多了 把环境变量设置啥的全删了 adb下载地址:htt ...

  8. unity打包安卓应用及生成签名

    首先,先进行安卓应用的打包.File->build Settings 弹出界面后选择Android,注意,这里如果黄色区域内容与我这个不一致,说明电脑上没有安装studio(安卓开发环境),具体 ...

  9. 五、Vi和Vim编辑器

    1. Vim编辑器: 在Linux下一般使用vi编辑器来编辑文件.vi既可以查看文件也可以编辑文件.三种模式: 命令行.插入.底行模式 切换到命令行模式:按Esc键: 切换到插入模式:按 i .o.a ...

  10. 有关Java字符集编码的问题

    在Java语言中,下列关于字符集编码(Character set encoding)和国际化(i18n)的问题,哪些是正确的? A.每个中文字符占用2个字节,每个英文字符占用1个字节 B.假设数据库中 ...