单链表的基本操作(创建,删除,插入,逆置)

代码鲁棒性较差,之后补充注释以及减少BUG增加可读性。

#include <iostream>
#include <vector>
#include <cstring>
#include <malloc.h>

using namespace std ;

typedef struct Node{
    int data ;
    struct Node *next ;
}node , *Lnode ;

int Linklist_length( node *head ){
    node *p = (node*)malloc(sizeof(node)) ;
    int len = 0 ;
    while ( p ){
        p = p->next ;
        len ++ ;
    }
    return len ;
}

Lnode Link_reverse_head( node *head ){
    node *p = head->next ;
    head->next = NULL ;
    node *q ;
    while ( p ){
        q = p ;
        p = p->next ;
        q->next = head->next ;
        head->next = q ;
    }
    return head ;
}

Lnode Linklist_insert( int pos , int num , node *head ){
    node *index = head ;
    for ( int i = 0 ; i < pos ; i ++ ){
        index = index->next ;
    }
    node *p = (node*)malloc(sizeof(node)) ;
    p->data = num ;
    p->next = index->next ;
    index->next = p ;
    return head ;
}

Lnode Linklist_delete( int pos , node *head ){
    node *index = head ;
    for ( int i = 1 ; i < pos ; i ++ ){
        index = index->next ;
    }
    node *p = index->next ;
    index->next = p->next ;
    p->next = NULL ;
    free( p ) ;
    return head ;
}

Lnode Creat_from_head( int count ){
    node *head = (node*)malloc(sizeof(node)) ;
    head->next = NULL ;
    int num ;
    while ( count -- && cin >> num ){
        node *p = (node*)malloc(sizeof(node)) ;
        p->data = num ;
        p->next = head->next ;
        head->next = p ;
    }
    return head ;
}

Lnode Creat_from_last( int count ){
    node *head = (node*)malloc(sizeof(node)) ;
    head->next = NULL ;
    int num ;
    node *index = head ;
    while ( count -- && cin >> num ){
        node *p = (node*)malloc(sizeof(node)) ;
        p->data = num ;
        index->next = p ;
        index = p ;
    }
    index->next = NULL ;
    return head ;
}

void output( node *head ){
    node *p = head->next ;
    while ( p ){
        cout << p->data << " " ;
        p = p->next ;
    }
    cout << endl ;
    return ;
}

int main(){
    int num ;
    cin >> num ;
    node *index_creat = Creat_from_last( num ) ;
    output( index_creat ) ;
    int pos , number ;
    cin >> pos >> number ;
    node *index_insert = Linklist_insert( pos , number , index_creat ) ;
    output( index_insert ) ;
    cin >> pos ;
    node *index_delete = Linklist_delete( pos , index_creat ) ;
    output( index_delete ) ;
//    int len = Linklist_length( index_creat ) ;
    node *index_reverse = Link_reverse_head( index_creat ) ;
    output( index_reverse ) ;
    return 0 ;
}

原文地址:https://www.cnblogs.com/Cantredo/p/9688746.html

时间: 2024-10-22 00:21:51

单链表的基本操作(创建,删除,插入,逆置)的相关文章

单向链表的基本操作-创建、插入、删除

一.链表的基本概念 单链表 :  n个结点链接成一个链式线性表的结构叫做链表,当每个结点中只包含一个指针域时,叫做单链表 表头结点:链表中的第一个结点,包含指向第一个数据元素的指针以及链表自身的一些信息 如长度等 ??数据结点:链表中代表数据元素的结点,包含指向下一个数据元素的指 ??尾结点:   链表中的最后一个数据结点,其下一元素指针为空,表示无后继  二.链表的定义 由于带头的链表操作比较方便,下文介绍的所有操作都是基于都头结点的单链表, 1.链表的定义 1 /* 链表节点的定义 */ 2

链表的基本操作,删除插入。

lass Node { int val; // data | element Node next; // 如果 next == null 表示是最后一个结点 Node(int val) { this.val = val; this.next = null; } public String toString() { return String.format("Node(%d)", val); } } public class MyLinkedList { public static vo

单链表的基本操作实现

1.写这篇博文的原因 C语言有三个重要部分:流程控制.函数.指针. 对于指针,单单了解它的简单运用是远远不够的,最重要的是学习链表.所以这篇文章通过用C语言实现链表的一些基本操作和总结,希望对C语言的指针有更新的理解和认识. 2.单链表的定义 单链表是通过一组任意的存储单元来存储线性表中的数据元素,这些存储单元可以是连续的也可以是不连续的.为了建立起数据元素之间的关系,对于每个数据元素除了存放元素自身的信息外,还必须有包含指向该元素直接后继元素位置的信息,这两部分信息组成一个节点,即每个节点都有

6-1 顺序表创建和就地逆置 (10 分)

本题要求实现顺序表的创建和就地逆置操作函数.L是一个顺序表,函数ListCreate_Sq(SqList &L)用于创建一个顺序表,函数ListReverse_Sq(SqList &L)是在不引入辅助数组的前提下将顺序表中的元素进行逆置,如原顺序表元素依次为1,2,3,4,则逆置后为4,3,2,1. 函数接口定义: Status ListCreate_Sq(SqList &L); void ListReverse_Sq(SqList &L); 裁判测试程序样例: //库函数

头插法链表的基本操作:创建空链表,插入结点,遍历链表,求链表长度,查找结点,删除结点

1 #include <stdio.h> 2 #include <stdlib.h> 3 /* 4 头插法链表的基本操作:创建空链表,插入节点,遍历输出节点数据,求链表长度,查找结点,删除结点. 5 */ 6 typedef struct node 7 { 8 int data; 9 struct node * next; 10 }NODE; 11 //创建空链表 12 NODE * createList() 13 { 14 NODE * head = (NODE *)malloc

「C语言」单链表/双向链表的建立/遍历/插入/删除

最近临近期末的C语言课程设计比平时练习作业一下难了不止一个档次,第一次接触到了C语言的框架开发,了解了View(界面层).Service(业务逻辑层).Persistence(持久化层)的分离和耦合,一种面向过程的MVC的感觉. 而这一切的基础就在于对链表的创建.删除.输出.写入文件.从文件读出...... 本篇文章在于巩固链表的基础知识(整理自<C语言程序设计教程--人民邮电出版社>第十章),只对链表的概念及增删改查作出探讨,欢迎指教. 一.链表结构和静态/动态链表 二.单链表的建立与遍历

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

数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个). 输入 第一行输入元素个数n: 第二行输入n个整数. 输出 第一行输出初始链表元素个数: 第二行输出按照逆位序所建立的初始链表: 第三行输出删除重复元素后的单链表元素个数: 第四行输出删除重复元素后的单链表. 示例输入 10 21 30 14 55 32 63

单链表的基本操作(建立.遍历.添加.删除)

有n个元素,我们把他们用链表表示,执行一些操作在某个位置添加一个数,或者删除某个位置的数: 输入合法的代码: #include<iostream> #include<stdio.h> #include<stdlib.h> using namespace std; struct node { int date; struct node *next; }; node *CreatList(node *head, int n); void TravList(node *hea

《实验课---单链表的基本操作》

//线性表---链表的基本操作#include<stdio.h>#include<stdlib.h>#include<conio.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define NULL 0typedef int Status; //函数结果状态代码typedef int ElemType; //数据元素类型//------线性表的单链表存储结构

D_S 单链表的基本操作

//  main.cpp #include <iostream> using namespace std; #include "Status.h" #include "LinkList.h" int main() { LinkList L; int n,i; ElemType e; InitList(L); cout<<"\nL="; ListTraverse(L); cout<<"\n请设置将向线性