链表的创建及逆序打印

1.链表的创建,以下:

void AddToTail(Link ** head,int value)
{
	Link * p = new Link();
	Link * ahead = *head;
	p->value = value;
	p->next = NULL;

	if(*head == NULL)
		*head = ahead = p;
	else
	{
		while(ahead->next)
		{
			ahead=ahead->next;
		}
		ahead->next = p;
	}
}

以上只是创建单个节点并把节点插入链表尾部,若要创建完整链表还需循环输入

2.链表节点的删除(删除筛选第一个)

void RemoveNode(Link ** head,int value)
{
	if(*head == NULL || head == NULL)
		return;
	Link * index = *head;
	Link * index_2=(*head)->next;
	if(index->value == value)
	{
		*head=index_2;
		delete(index);
	}
	else
	{
		while(index_2->value!=value)
		{
			index=index->next;
			index_2=index_2->next;
			if(index_2 == NULL)
				break;
		}
		index->next=index_2->next;
		delete(index_2);
	}
}

因为使用 new 申请的空间,所以需要用 free 释放内存

3.链表的逆序输出

    ×使用栈

void ReversePrint_stack(Link ** head)
{
	if(head == NULL || *head == NULL)
		return ;
	int stack[30];
	int top=0;
	Link * index=(*head);
	while(1)
	{
		if(index == NULL)
			break;
		stack[top++] = index->value;
		index = index->next;
	}
	--top;
	while(top >= 0)
	{
		printf("%2d",stack[top]);
		--top;
	}
	printf("\n");

}  

    ×使用递归

void ReversePrint(Link * head)
{
	if(head == NULL)
		return;
	ReversePrint(head->next);
	printf("%2d",head->value);
}

茅檐低小,溪上青青草。

最喜小儿亡赖,溪头卧剥莲蓬。

原文地址:https://www.cnblogs.com/lazytothink/p/12187557.html

时间: 2024-11-10 12:35:04

链表的创建及逆序打印的相关文章

算法习题---线性表之单链表逆序打印

一:题目 逆序打印单链表中的数据,假设指针指向单链表的开始结点 二:思路 1.可以使用递归方法,来进行数据打印 2.可以借助数组空间,获取长度,逆序打印数组 3.若是可以,对链表数据使用头插法,逆序排列,然后正序打印即可 三:算法实现(这里使用方法一:递归实现简单易懂) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 #define OK 1 #def

单链表逆序打印!

单链表打印的时候 一般 if (p== NULL) return; printf("%d ",p->data ); reverse_show(p->next); 结果: 123456 就可以依次打印了 但是如果把打印语句放在后面 就会逆序打印 if (p== NULL)return; reverse_show(p->next); printf("%d ",p->data ); 结果 654321 这是因为退出的时候 是从后面进行的!

C语言实现链表的逆序打印

我在前面几篇博客中<C语言实现链表节点的插入><C语言实现链表节点的删除><C实现头插法和尾插法来构建链表><C语言实现链表的基本操作>实现了链表的很多增删改查操作.这里我们要来实现链表的逆序打印,使用C来实现.代码上传至 https://github.com/chenyufeng1991/ReverseLinkedList . 基本算法是: (1)使用尾插法构建原链表: (2)依次遍历原链表: (3)取出遍历中的节点使用头插法建立一个新链表: (4)打印逆

面试:用 Java 逆序打印链表

昨天的 Java 实现单例模式 中,我们的双重检验锁机制因为指令重排序问题而引入了 volatile 关键字,不少朋友问我,到底为啥要加 volatile 这个关键字呀,而它,到底又有什么神奇的作用呢? 对 volatile 这个关键字,在昨天的讲解中我们简单说了一下:被 volatile 修饰的共享变量,都会具有下面两个属性: 保证不同线程对该变量操作的内存可见性. 禁止指令重排序. 共享变量:如果一个变量在多个线程的工作内存中都存在副本,那么这个变量就是这几个线程的共享变量. 可见性:一个线

C++链表逆序打印节点

#include <iostream> #include <stack> using namespace std; template<typename Type> struct Node { Type data; Node *next; Node(Type d = Type()):data(d),next(NULL){} }; template<typename Type> class List { public: List() { head = NULL;

C语言实现双向非循环链表的逆序打印

我在上一篇博客中<C语言实现双向非循环链表>实现了如何构造一个双向非循环链表,并实现了正向打印.我还在之前一篇博客<C语言实现单链表的逆序打印>中实现了单链表的逆序打印.这篇博客我们来实现对双向非循环链表进行逆序打印,实现起来非常的简单.代码已经上传至 https://github.com/chenyufeng1991/ReverseDoubleLinkedList . 核心代码如下: //打印非循环双向链表,这个其实是正向打印 void printList(Node *pNode

leetcode——Reverse Linked List II 选择链表中部分节点逆序(AC)

Reverse a linked list from position m to n. Do it in-place and in one-pass. For example: Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL. Note: Given m, n satisfy the following condition: 1 ≤ m ≤ n ≤ le

Python练习题 024:求位数及逆序打印

[Python练习题 024] 给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. ---------------------------------------------- 这题如果不用递归,实在太简单了!!!代码上: str = input('请输入一个不多于5位的正整数:') print('这个数字是%s位数,逆序为%s.' % (len(str), str[::-1])) 输出结果如下: 请输入一个不多于5位的正整数:45931这个数字是5位数,逆序为13954

输入一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

package com.hanqi; import java.util.*; public class Nixudayin { public static void main(String[] args) { // TODO 自动生成的方法存根 System.out.println("输入一个不多于5位的正整数"); Scanner shu=new Scanner(System.in); String a=shu.next(); System.out.println("输入的