带头结点单链表逆序输出 递归求解 求破!

melody5417 2014-06-02 11:27:55
带头结点的单链表逆序输出

重点是采用递归

写了一个算法只适用于无头结点,带头结点的居然蒙住了,求帮助~~~

下面是我写的适用于无头结点的
struct ListNode
{
int data;
ListNode * next;
};

void print(ListNode *pHead)
{

if(pHead)
{
if(pHead->next)
{
print(pHead->next);
}
printf(“%d\n”, pHead->data);
}
}

当输入头结点的会输出data,进而崩溃,但是如果这么改
void print(ListNode *pHead)
{
if(pHead==null || pHead->next == null)
{
return;
}
else
{
if(pHead->next)
{
print(pHead->next);
}
printf(pHead->data);
}
}

头结点和尾节点又都会直接return 我直接崩溃了 求解啊!!!!
...全文
938 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
王者荣耀zhou 2014-06-27
  • 打赏
  • 举报
回复
最后还要
delete pList;
王者荣耀zhou 2014-06-27
  • 打赏
  • 举报
回复
// ReList.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


using namespace std;
//定义结点
typedef struct node
{
	int data;
	node* next;

}NODE,*PNODE;

//定义链表
typedef struct list
{
	int len;
	PNODE pHeader;

}LIST,*PLIST;

//初始化链表,建立头结点
void InitList(PLIST pList)
{
	pList->pHeader = new NODE;
	pList->pHeader->next =NULL;
	pList->len = 0;
}

//插入数据
void InsertDataToList(PLIST pList,int data)
{
	PNODE np;
	PNODE p = pList->pHeader;
	if ( p == NULL ) return ; //链表还没有初始化,直接返回

	while ( p->next != NULL)
	{
		p = p->next;
	}
	np= p->next = new NODE;
	np->data = data;
	np->next = NULL ;
	pList->len ++;
}

//逆序打印
void RevPrint(PNODE pNode)
{
	PNODE p = pNode;
	if( p->next != NULL )
	{
		p = p->next;
		RevPrint(p);  //递归打印下一个节点
	}
	cout<<p->data<<endl; //输出当前结点数值

}

//删除链表,释放空间
void DestroyList(PLIST pList)
{
	PNODE p,q;
	p = q = pList->pHeader;
	while ( p != NULL )
	{
		q = p->next;
		delete p;
		p = q;
	}
	  
}

int _tmain(int argc, _TCHAR* argv[])
{
    PLIST pList = new LIST;
	InitList(pList);
	for ( int i = 0 ; i < 100; i ++)
	{
		InsertDataToList(pList,i);
	}

	RevPrint(pList->pHeader->next); //越过头结点,直接从数据结点开始打印
	DestroyList(pList);
	return 0;
}
snoowood 2014-06-03
  • 打赏
  • 举报
回复
void print(ListNode *pHead) { if(pHead==null) { return; } else { if(pHead->next) { print(pHead->next); } printf(pHead->data); } }
melody5417 2014-06-02
  • 打赏
  • 举报
回复
1楼 这样也可以。。。。。 那弱弱的问一下 能不能在算法里调整,过滤掉头结点呢
bjjboom 2014-06-02
  • 打赏
  • 举报
回复
mian里面调的时候传参数时传head->next
源码链接: https://pan.quark.cn/s/651b74ed6067 《MQL4中文帮助手册》是一部详尽阐述MetaQuotes Language 4(MQL4)编程语言的参考书籍,其核心目标在于协助用户掌握并运用MQL4进行金融市场的自动化交易系统构建。MQL4作为MetaTrader 4交易平台的核心编程语言,赋予了交易者开发自定义指标、Expert Advisors(EA智能交易系统)以及脚本的能力。 ### MQL4基础知识 1. **Syntax 语法**:MQL4的语法规则与C/C++语言展现出相似性,涵盖了变量声明、函数调用、条件判断、循环机制等核心要素。熟练掌握并合理运用语法是开发高效MQL4代码的先决条件。 2. **Comments 注释**:在MQL4编程环境中,单行注释采用两个斜线(//)进行标识,而多行注释则通过/* 和 */进行界定。注释的主要功能在于阐释代码用途,从而提升代码的可读性与可维护性。 3. **Identifiers 标识符**:标识符是程序中用于命名变量、函数、类等元素的字符序列。其命名规则要求必须以字母或下划线作为开头,后续可包含字母、数字或下划线组合。MQL4语言对大小写敏感,因此`MyVariable`与`myvariable`被视为两个独立的标识符。 4. **Reserved words 保留字**:保留字是MQL4语言中预先设定的特殊词汇,例如`int`, `bool`, `double`, `if`, `else`, `for`, `while`等,这些词汇不可用作自定义标识符,以防止与语言关键字产生冲突。 5. **Data types 数据类型**:MQL4支持多元化的数据类型,包括...

33,025

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧