# 实现单链表反转

2018-02-03 10:18:54来源:网络收集作者:管理员人点击

#pragma once
#ifndef LIST_H
#define LIST_H
#include
using namespace std;
struct ListNode
{
int val;
ListNode* next;
ListNode():val(0),next(NULL){};
ListNode(int value):val(value),next(NULL){};
};
//构造带头结点的链表
{
return -1;
for (int i=1;i<10;i++)
{
ListNode* node = new ListNode(i);
}
for (int j=0;j<10;j++)
{
cout<val<<"->";
}
cout<return 0;
}
//逆序单链表--非递归实现
{
ListNode* pPrev = NULL;
ListNode* pNext = NULL;
//交换前面两个节点
return NULL;//不存在节点
while (p !=NULL)
{
pNext = p->next;
if (pNext == NULL)
p->next = pPrev;
pPrev = p;
p = pNext;
}
}
//逆序单链表--递归实现
{
if (p == NULL || p->next == NULL)
{
return p;
}
else
{
tmp->next = p;
return p;
}
//0->1->2->3->4->5->6->7->8->9
//程序结束之后0->1,1->0
}
//逆序输出单链表元素
{
return 0;
cout<val<<"->";
}
//注意链表使用结束时要释放内存
{
return 0;
cout<<"释放链表：";
while (p != NULL)
{
ListNode* pTmp = p->next;
cout<val<<"->";
delete(p);
p = pTmp;
}
cout<return 0;
}
//打印函数
void PrintNode(ListNode* node)
{
for (;node!=NULL;)
{
cout<val<<"->";
node = node->next;
}
cout<}
#endif
//
#include "stdafx.h"
#include "list.h"
int _tmain(int argc, _TCHAR* argv[])
{
//逆序输出链表的值
cout<cout<<"=============================="<//倒置链表
cout<<"=============================="<cout<<"******************************"<ListNode* h = new ListNode();
cout<<"=============================="<//0->1->2->3->4->5->6->7->8->9
//程序结束之后0->1,1->0
PrintNode(h);
cout<<"=============================="<//链表释放内存
return 0;
}