数据结构与算法分析 3.12 — 单链表转置

题目一:  不含头结点的单链表转置,算法时间复杂度O(N)

代码如下

struct LNode;
typedef struct LNode *List;
typedef struct LNode *Position;
struct LNode
{
    ElementType elem;
    Position next;
};

/* 无头结点单链表转置 */
List Reversion(List L)
{
    Position previousPos, currentPos, nextPos;

    previousPos = nullptr;
    currentPos = L;
    nextPos = L->next;

    while (nextPos != nullptr)
    {
        currentPos->next = previousPos;
        previousPos = currentPos;
        currentPos = nextPos;
        nextPos = nextPos->next;
    }
    currentPos->next = previousPos;
    return currentPos;
}

题目二: 带头结点的单链表转置,算法时间复杂度O(N)

struct LNode;
typedef struct LNode *List;
typedef struct LNode *Position;
struct LNode
{
    ElementType elem;
    Position next;
};

/* 带头结点单链表转置 */
List Reversion(List list)
{
    List header = list;
    List currentPos = header->next;

    header->next = nullptr;
    while (currentPos != nullptr)
    {
        Position tmp = currentPos;
        currentPos = currentPos->next;
        tmp->next = header->next;
        header->next = tmp;
    }
    return header;
}
时间: 2024-08-05 08:46:36

数据结构与算法分析 3.12 — 单链表转置的相关文章

12.单链表排序

12.单链表排序 思路: 参见基本函数13://冒泡排序链表,具体的做法是“狸猫换太子”,即只交换节点中的值,对链表结构不做改动. void sortList(Node*& Head); //链表排序 //排序的方法是不破坏结构,有“狸猫换太子”的意思,只进行value的交换,不破坏链表结构 void sortList(Node*& Head) {   int count=numOfNodes(Head);   if(count==0||count==1)   {    return ;

【Java】 大话数据结构(2) 线性表之单链表

本文根据<大话数据结构>一书,实现了Java版的单链表. 书中的线性表抽象数据类型定义如下(第45页): 实现程序: package LinkList; /** * 说明: * 1.<大话数据结构>中没有线性表的长度,但提到可以存储于头节点的数据域中. * 本程序的线性表长度存放于count变量中,线性表长度可以使程序比较方便. * 2.程序中,第i个位置代表第i个结点,头结点属于第0个结点 * 3.因为链表为泛型,整表创建采用整型(随机整数做元素),所以有出现一些类型转换 * 4

【数据结构】链式存储单链表

数据结构之单链表的链式存储实现 //====================================================================== // // Copyright (C) 2014-2015 SCOTT // All rights reserved // // filename: List.c // description: a demo to display SeqList // // created by SCOTT at 01/28/2015

数据结构(C实现)------- 单链表

在单链表中,每一个结点包含两部分:存放每一个数据元素本身信息的数据域和存放其直接后继存储位置的指针域. 单链表结点的类型描述: typedef int ElemType; typedef struct node{ ElemType data; struct node *next; }LNode,*LinkList; 单链表的存取必须从头指针开始进行,因此,通常用头指针来标识一个单链表.若头指针为空,则表示空链表.有时,在单链表的第一个结点之前附设一个结点,称之为头结点. 单链表的操作: 1. 单

数据结构:线性表之单链表

线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构.线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的.线性表有两种存储结构: ①顺序存储结构,即存储单元在一段连续的地址上存储,常见的数组就是顺序存储结构的线性表: ②链式存储结构,即存储单元在不连续的地址上存储.因为其不连续性,除了要存数据元素信息(数据域)外,还要存储它后继元素(结点)的地址(指针域,链).学习链式结构最好将结点结构牢记于心,如下图: 链表的每个结点只含有一个指

数据结构复习---顺序表和单链表

1.前言: 最近比较浮躁,想学习一门新的技术却总是浅尝辄止,遇到不懂的地方就想跳过去,时间长了,心态就有点崩了.静下心来,去喝了几碗心灵鸡汤.鸡汤博主感动到了我:"无专注,无风景.不要太贪心,一次只做一件事,而且只做最重要的事.".于是乎,我把家里翻了个底朝天,找到了我垫在床底下的<数据结构>这本书,觉得自己是时候静下心来好好复习一下基础了.今天刚看到顺序表和链表,把我的学习心得记录在这里.也希望自己能坚持,老老实实的把这本书复习完. 2.数据结构的重要性: 讲一门知识之前

数据结构 --- 02. 内存, 顺序表, 单链表

一.内存 1.基本概念 计算机的作用: 就是用来存储和运算二进制的数据 变量的概念: 就是计算机中的某一块内存空间   衡量计算机内存大小的范围: bit byte kb mb 计算机中内存空间都会有两个基本的属性 大小 地址 不同数据占用内存空间的大小 整数:4byte float:4byte double:8byte 字符:1byte 理解a=10的内存图(引用,指向) 指向:如果一个变量存储了某一块内存空间的地址,则表示该变量指向该块内存 引用:如果一个变量存储了某一块内存空间的地址,则该

数据结构(三)之单链表反向查找

一.反向查找单链表 1.简单查找 先遍历获取单链表单长度n,然后通过计算得到倒数第k个元素的下标为n-k,然后查找下标为n-k的元素. 2.优化查找 先找到下标为k的元素为记录点p1,然后设置新的记录点p2的下标从0开始,同时遍历两个记录点,直到p1的值为null,p2是倒数第k个元素. 单链表结点: package cn.edu.scau.mk; /** * * @author MK * @param <T> */ public class Node<T> { private T

数据结构笔记5带头结点单链表

/* 本次操作是对带头节点单链表的操作  包括删除  插入 判空 建立  包括删除插入函数  显示函数 目的是为了对单链表做一个基本操作的总结----1*/ #include<stdio.h>#include<malloc.h>#include<conio.h>#define OK 1#define ERROR -1#define OVERFLOW -2#define ENDFLAG 0typedef struct LNode{ int data; struct LNo