单链表创建与反转

#include <iostream>
#include <fstream>

using namespace std;

struct LinkNode
{
    int data;
    LinkNode* next;
};

LinkNode* createLink(LinkNode* head)
{
    ifstream fin;
    fin.open("list.txt");

    if(!fin){
        cout << "open file failed......" << endl;
        return head;
    }
    LinkNode* tail = NULL;
    int data;
    while(fin>>data){
        LinkNode* node = new LinkNode();
        node->data = data;
        node->next = NULL;
        //cout << data << endl;
        if(head==NULL){
            head=node;
            tail=node;
        }
        else{
            tail->next = node;
            tail = node;
        }
    }
    return head;

}

LinkNode* reverseLink(LinkNode* head)
{
    LinkNode* node = head;
    LinkNode* reverseHead = NULL;
    LinkNode* pre = NULL;
    LinkNode* next = NULL;
    while(node!=NULL){
        next = node->next;
        if(next == NULL){
            reverseHead = node;
        }
        node->next = pre;
        pre = node;
        node = next;
    }
    return reverseHead;
}

void print(LinkNode* head)
{
    if(head == NULL){
        cout << "linknode is null" <<endl;
        return;
    }
    LinkNode* node = head;
    while(node!=NULL){
        cout << node->data <<endl;
        node = node->next;
    }

}

int main()
{
    LinkNode* head = NULL;
    head = createLink(head);
    print(head);
    head = reverseLink(head);
    print(head);
    return 0;
}
时间: 2024-10-18 20:27:27

单链表创建与反转的相关文章

单链表(包含反转、导出、循环链表思路)

生活永远是自己的,美哉美哉.实习告一段落,大学也算彻底结束,就像毛不易唱的二零三,给我想要的自由.最近学习汇编及数据结构(C语言),链表也总算告一段落,本篇是单链表的学习代码笔记,本来也想想每一步都做图,分享知识,让更多的朋友去学习,但是本人局限于能力,图片无法表达自己想要的描述,所以干脆不做图了.随后日子会有双链表的操作,后面仍然会分享栈.队列的自学笔记,也可能写汇编8086的心得,希望大家一起共勉.代码可能有些繁琐(很多地方都可以优化),只是新手 给 新手的一些参考反转链表用的迭代思路参考(

数据结构与算法基础之非循环单链表创建和链表遍历

1 #include<stdio.h> 2 #include<malloc.h> 3 #include<stdlib.h> 4 //函数声明 5 PNODE create_list();//返回值是链表头结点的地址 6 void traverse_list(PNODE pHead); 7 8 typedef struct Node{ 9 int data;//数据域 10 struct Node * pNext;//指针域 11 }NODE,*PNODE;//NODE等

把单链表相邻元素反转

//函数功能:把链表相邻元素反转 //输入参数:head:指向链表头结点 void reverse(Node* head){ if (head == NULL || head->next == NULL) return ; Node *pre = head, *cur = head->next, *next = NULL; while (cur != NULL && cur->next != NULL) { next = cur->next->next; pr

链表学习一:单链表创建-头插入与尾插入

链表的创建过程是一个动态的生成过程,创建链表有两种思路,一种是从表头插入,另一种是从表尾插入. 表头插入思路:从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表头上,直到读入结束标志为止. 表尾插入思路:从一个空表开始,重复读入数据,生成新结点,将读入数据存放在新结点的数据域中,然后将新结点插入到当前链表的表尾上,直到读入结束标志为止. 两种方法C++实现如下: 1 #include<iostream> 2 using namespace

算法初探001——单链表反转

单链表的反转问题是一道很基本的问题.题目如下: 有一个单链表 1 ->2->3->4->5->6 反转后链表为:6->5->4->3->2->1. 方法一 解析:可以使用三个指针pre ,temp,next对逐个节点进行反转.详细流程如下: (4) 初始状态 pre = head; tmp = head->next; pre->next = null; (2)第一次循环: next = tmp->next; tmp->ne

单链表的算法

要点 单链表的结构可表示如下: typedef int ElemType; typedef struct LNode { ElemType data; struct LNode* next; } LNode, *LinkList; 基本算法 插入结点 假设要在单链表的a结点和b结点之间插入一个值为x的新结点. 如下图所示,指针s指向一个值为x的结点,为了插入s. 首先让s的next指针指向b,即s->next = p->next; 然后,让a的next指针指向s,即p->next = s

【C语言数据结构】静态单链表

StaticLinkLinst.h #ifndef STATIC_LINKLIST_H #define STATIC_LINKLIST_H typedef void StaticLinkListNode;    //静态单链表节点 typedef void StaticLinkList;        //静态单链表 /*  * 创建静态单链表  * @param capacity 静态单链表的最大容量  * @return 返回静态单链表的指针  */ StaticLinkList* Stat

[转载(有删改)]单链表

申明: 转载   http://www.cnblogs.com/Romi/category/348304.html 链表:使用节点存储数据元素,节点的地址可以连续也可以不连续 单链表中一个节点的组成:数据域+指针域,指针于中存放的是是一个指针,指向下一个节点的地址. 内容包括:单链表的定义/初始化/查找节点/插入节点/删除节点 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<malloc.h> 4 5 //定义单链

C语言实现单链表(带头结点)的基本操作

我在之前一篇博客<C语言实现单链表(不带头结点)的基本操作>中具体实现了不带头结点的单链表的11种操作:如计算链表长度.初始化.创建链表.清空链表等等.但是在实际使用中,带头结点的单链表往往比不带头结点的单链表用的更多,使用也更为方便.因为不用单独考虑第一个节点的情况了,第一个节点和其他后续节点的处理全都一样了,简化操作.这篇博客将会来实现带头结点的单链表的11种操作.代码上传至: https://github.com/chenyufeng1991/LinkedList_HeadNode  .