`
ping8899
  • 浏览: 44225 次
社区版块
存档分类
最新评论

单链表逆序

阅读更多

    实现一:

#include "stdafx.h" <br>
#include <iostream> <br>
using namespace std; <br><br>
template <typename T> <br>
struct MyNode <br>
{ <br>
T id; <br>
MyNode * next; <br>
MyNode(T _id) <br>
{ <br>
id = _id; <br>
next = NULL; <br>
} <br>
}; <br><br>
template <typename T> <br>
class MyList <br>
{ <br>
MyNode<T> * head; <br>
MyNode<T> * current; <br>
public: <br>
MyList() : head(NULL) {} <br>
void add(T value) <br>
{ <br>
MyNode<T>* node = new MyNode<T>(value); <br>
if(head == NULL) <br>
{ <br>
head = node; <br>
current = head; <br>
} <br>
else <br>
{ <br>
current->next = node; <br>
current = node; <br>
} <br>
} <br>
void showAll() <br>
{ <br>
MyNode<T> *go = head; <br>
while(go != NULL) <br>
{ <br>
cout<<go->id<<endl; <br>
go = go->next; <br>
} <br><br>
} <br>
void reverse() <br>
{ <br>
MyNode<T> *preNode = NULL; <br>
MyNode<T> *currentNode = head; <br>
MyNode<T> *nextNode = head->next; <br>
while(true) <br>
{ <br>
nextNode = currentNode->next; <br>
currentNode->next = preNode; <br>
preNode = currentNode; <br>
currentNode = nextNode; <br>
if(currentNode->next == NULL) <br>
{ <br>
head = currentNode; <br>
head->next = preNode; <br>
break; <br>
} <br>
} <br>
} <br>
}; <br><br><br>
int main(int argc, char * argv[]) <br>
{ <br>
MyList<int> *list = new MyList<int>(); <br>
list->add(123); <br>
list->add(456); <br>
list->add(789); <br>
list->showAll(); <br>
list->reverse(); <br>
cout<<"after reverse:"<<endl; <br>
list->showAll(); <br>
system("pause"); <br>
return 0; <br>
}

实现二:

#include<iostream><br>
#include<conio.h><br>
#include<list><br>
using namespace std;

template<class T><br>
struct Node{<br>
T value;<br>
struct Node<T>* next;<br>
Node(const T&amp; v):value(v),next(NULL){}<br>
~Node(){<br>
delete next;<br>
next=NULL;<br>
cout<<"~Node()"<<endl;<br>
}<br>
};

template<class T,class N><br>
class Iterator{<br>
public:<br>
Iterator(T v=NULL):t(v){}<br>
T&amp; operator++()const{<br>
t=t->next;<br>
return t;<br>
}<br>
const N&amp; operator*()const{<br>
return t->value;<br>
}<br>
N&amp;operator*(){<br>
return t->value;<br>
}<br>
const T&amp; getT()const{<br>
return t;<br>
}<br>
Iterator&amp; operator=(Iterator&amp; other){<br>
t=other.getT();<br>
return *this;<br>
}<br>
const Iterator&amp; operator=(Iterator&amp; other)const{<br>
t=other.getT();<br>
return *this;<br>
}<br>
private:<br>
mutable T t;<br>
};

template<class T,class N><br>
bool operator!=(Iterator<T,N> i1,Iterator<T,N> i2){<br>
return i1.getT()!=i2.getT();<br>
}

<br>
template<class T><br>
class NList{<br>
public:<br>
typedef Iterator<Node<T>*,T> iterator;<br>
typedef const Iterator<Node<T>*,T> const_iterator;<br>
NList(const T&amp; value){<br>
head=tail=new Node<T>(value);<br>
}<br>
void addNode(const T&amp; value){<br>
tail->next=new Node<T>(value);<br>
tail=tail->next;<br>
}<br>
iterator begin(){<br>
return iterator(head);<br>
}<br><br>
iterator end(){<br>
return iterator(tail->next);<br>
}<br>
void reverse(){<br>
if(head==tail)<br>
return ;<br>
Node<T>* end=head,*begin=tail;<br>
Node<T>* p1=head,*p2,*p3;<br>
p2=p1->next;<br>
p1->next=NULL;<br>
while(p2!=tail){<br>
p3=p2->next;<br>
p2->next=p1;<br>
p1=p2;<br>
p2=p3;<br>
}<br>
p2->next=p1;<br>
head=begin,tail=end;<br>
}<br>
~NList(){<br>
delete head;<br>
head=NULL;<br>
tail=NULL;<br>
cout<<"~NList()"<<endl;<br>
}<br>
private:<br>
Node<T>* head;<br>
Node<T>* tail;<br>
};

<br>
int main(){<br>
NList<int> nlist(1);<br>
nlist.addNode(2);<br>
nlist.addNode(3);<br>
NList<int>::const_iterator p=nlist.begin(),end=nlist.end();<br>
for(p=nlist.begin();p!=end;++p)<br>
cout<<*p<<endl;<br>
nlist.reverse();<br>
end=nlist.end();<br>
for(p=nlist.begin();p!=end;++p)<br>
cout<<*p<<endl;<br>
getch();<br>
return 0;<br>
}

 
0
0
分享到:
评论

相关推荐

    简单的单链表逆序 非递归

    此外,在数据库查询、算法设计以及数据预处理等场景下,单链表逆序也发挥着关键作用。掌握单链表逆序的实现方法有助于提高程序员解决复杂问题的能力。 ### 非递归逆序单链表的实现 在给出的代码片段中,我们看到一...

    单链表逆序详解

    单链表逆序详解   1、具有链表头的单链表 一段单链表逆序的程序  (2)取p3保留p2-&gt;next p3=p2-&gt;next;  将p2插入p1之前 p2-&gt;next = p1;  p1指向p2指向的节点 p1=p2;  p2指向p3指向的节点 p2=p3;

    单链表逆序(简明,易懂)

    单链表逆序(简明,易懂) 单链表逆序(简明,易懂) 单链表逆序(简明,易懂)

    单链表的合并(递归-非递归)以及将单链表逆序

    单链表的合并(递归-非递归)以及将单链表逆序 单链表是数据结构中的一种基本结构,它是一种顺序存储的链式结构。单链表的合并是指将两个或多个单链表合并成一个单链表,而保持原来的顺序。单链表的逆序是指将...

    java第一次作业 单链表逆序

    这次的作业“单链表逆序”旨在让你理解链表的基本操作以及如何通过编程实现链表的逆序。下面我们将深入探讨这个主题。 首先,单链表的基本结构包括头节点(head)和一系列节点,每个节点有两部分:数据域(用于存储...

    算法实现:Java单链表逆序

    有一次,我去陆家嘴一家银行面试,面试官给我出了一道算法编程题,用Java实现单链表逆序,不到10分钟,我就写出来了,拿到了offer。 但是当时是写在纸上的,我用手机拍了下来,然后回去又在电脑上把代码敲了下来,...

    实验二--单链表逆序排列.pdf

    实验二--单链表逆序排列.pdf

    单链表逆序与排序

    linux 下 c语言实现 单链表的逆序与排序, 包含测试程序, 编译时需加-DTEST

    C语言实现单链表逆序与逆序输出实例

    本篇将详细讲解如何实现单链表的逆序以及逆序输出。 首先,我们要理解逆序输出的概念。逆序输出是指在输出链表元素时,按照相反的顺序呈现,而不是按照链表原有的顺序。这可以通过两种方式实现: 1. **递归**:...

    c++ 单链表的逆序排列 正确

    单链表的逆序排列,用的是c++语言的,程序正确能够运行,易懂

    java单链表逆序用法代码示例

    【Java 单链表逆序】 在计算机科学中,链表是一种常见的数据结构,而单链表是其中最基础的形式。单链表由一系列节点组成,每个节点包含数据和指向下一个节点的引用(通常称为`next`)。逆序一个单链表意味着将链表中...

    创建单链表,逆序输入

    创建单链表,单链表逆序输入,最终正序输出。是用以独立函数写出

    利用栈来实现单链表的逆序

    ### 利用栈来实现单链表的逆序 #### 背景介绍 在计算机科学领域,数据结构是组织和存储数据的方式之一,而算法则是处理这些数据的方法。单链表是一种常见的线性数据结构,它通过节点之间的指针连接来存储数据。栈是...

    java实现单链表之逆序

    单链表逆序是指将链表中的元素顺序颠倒,使得原本的第一个元素变为最后一个,原本的最后一个元素变为第一个。这个过程可以通过迭代或递归的方式来实现。本文将详细介绍如何使用Java实现单链表的逆序。 首先,我们...

    C++使用递归来顺序和逆序输出链表的全部元素

    ### C++ 使用递归来顺序和逆序输出链表的全部元素 #### 概述 在计算机科学中,链表是一种常见的数据结构,用于存储一系列的数据元素。每个元素包含实际存储的数据和一个指向列表中下一个元素的引用(或指针)。在...

    java实现的单链表及逆序显示

    昨天到笔试,没想到出了这么一个题,用java实现单链表,并把它逆序,输出,我晕了半天,回来才做出来,不知道还有没有用?!

    华为软件工程师笔试题

    总的来说,理解和掌握单链表逆序是软件工程师必备的技能之一,它涉及到数据结构的基础知识和逻辑思维能力,同时也是面试和笔试中常见的题目类型。通过这样的练习,不仅可以提升对链表操作的理解,还能锻炼解决问题的...

Global site tag (gtag.js) - Google Analytics