链表反转(c实现链表反转)
本篇文章给大家谈谈链表反转,以及c实现链表反转对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、设计一个算法,将链表中所有结点的链接方向“原地”逆转,即要求仅利用原表的存储空间,
- 2、反转逆转的意思
- 3、借助栈实现单链表上的逆置运算
- 4、逆转线性单链表的算法????c++语言
- 5、设有一个带头结点的单链表head,试设计一个算法,将它逆转.要求逆转在原链表上进行
- 6、已知线性表La和Lb中的元素按值非递减排列。归并La和Lb得到新的线性表Lc,Lc的元素也按值非递减排列。
设计一个算法,将链表中所有结点的链接方向“原地”逆转,即要求仅利用原表的存储空间,
#includestdio.h
class note{
public:
note *next;
int index;
note(int n):index(n), next(0){}
};
void addTail(note *head, note* toA){
while(head-next != 0)
head = head-next;
head-next = toA;
}
note* getTail(note* head)
{
while(head-next != 0)
head = head-next;
return head;
}
void removeTail(note* head){
if(head-next == 0)return;
while(head-next-next != 0)
head = head-next;
head-next = 0;
}
note* turn(note* head){
note* ret = getTail(head);
removeTail(head);
while(getTail(head) != head){
addTail(ret, getTail(head));
removeTail(head);
}
addTail(ret, head);
return ret;
}
note* create(){
note* head = new note(0);
note* last = head;
for(int i = 1; i = 9; ++i)
{
addTail(head, new note(i));
}
return head;
}
void printList(note *head){
while(head != 0){
printf("%d-", head-index);
head = head-蠢物誉next;
}
printf("end\n");
}
int main(){
note* head = create();
printList(head);
head = turn(head);
printList(head);
return 0;
}
/*
创建了一个0~9的单向链表。
翻转后结尾将成为开头,因此取出结尾元素作为新链表的开头并删除结尾元带段素,
之后不断取出结尾元素添加到新的链表。详细见turn函数。
0-1-2-3-4-5-6-7-8-9-end
9-蚂陵8-7-6-5-4-3-2-1-0-end
*/
反转逆转的意思
问题一:偏转、逆转、到转、反转区别? 偏转……偏离正常方向转动。
逆转,倒转,反转意思一样。
问题二:形容反转的句子 形容反转的句子:
首先理解反转的意思:
反转的意思是指,当一件事情到达某一端的极致的时候,
人们眼看着就会在这个方向产生结果的,但是猛地一下
产生了不可思议的逆转,导致结果成了另一个方向。
例如:
他的外祖母在重症病房,加了氧气罩,眼看着医生都对
家属摇头表示没办法再继续医治了。但是凭借着外祖母
顽强的意志。在半个月后无恙的出院了。
问题三:字符串逆转什么意思 就是逆序字符串,比如原字符串为“abcdefg”,逆转后的字符串就是“gfedcba”
问题四:今日的逆转是反弹还是反转 不知道题主所谓的今日是多久?是周五么?
那只是市场茄答让听闻打击空头的一个日内反弹,甚至可以认为诱多的行为。毕竟这波牛市已经结束,大量的获利盘、恐慌盘、强平正在无脑下杀, *** 出各种利好只是想短期内平复市场疯狂的下杀,至于反转,至少需要数月时间。周末的利好可能会让周一高开,但很难抑制股指下坐。特别是创业板没人能救。
问题五:逆是什么意思及发音 逆
【ぎゃくてん】【gyakutenn】◎
【名?自他?サ变举蚂/三类】 反转,倒转,逆转。;倒过来,反过来;倒退;恶化。;(飞机的)空中翻跟头。
名?自他?サ变/三类
1. 反转,倒转,逆转。(それまでとは逆の向きに回すること)。
n车が逆する
齿轮倒转。
天地を逆させる
扭转乾坤。
2. 倒过来,反过来;倒退;恶化。(事のなりゆきや优劣のv系が今までとは逆になること)。
试合の形势が逆する
比赛的局势反过来。
逆ホ`ムラン
扭转局势的本垒打。
s史のn车は逆しないもの颤局である
历史的车轮是不会倒转的。
3. (飞机的)空中翻跟头
问题六:正转反转的翻译是:什么意思 正转和运转两词用得很多,但在日常生活口语与专业术语会不相同,就我所知,有如下的表达方式:
正转 (顺转) 反转(逆转)
right turn left turn
natural turn reverse turn
clockwise rotation counter clockwise rotation
有关“转”字,除了上面的 “turn、 rotation”外,还有 spiral、top ……
不知是否你所要的?
问题七:逆转线性链表其中的逆转是什么意思?谢谢 就是反转 原来的头结点变成最后一个 原来的最后一个变成第一个
p=head;
q=p-next;
while(q!=NULL)
{
r=q-next;
q-next=p;
p=q;
q=r;
}
return p;
问题八:Inversion到底还有什么意思,在字典上查的是逆转,反向的意思,一同学的网名是这个英语单词,它说不是... inversion英音:[in'v?:??n]美音:[?n'v???n]
以下结果由译典通提供词典解释
名词 n.
1.
反向;倒置;倒转
2.
【语】倒装法
3.
【音】转回
问题九:原油投资中突破,跌破和反转的意思是什么? 突破的定义是价格冲过上升趋势线切站稳上升趋势线。
跌破的定义是价格跌到下降趋势线以下且回调无力。
反转的定义是价格朝原来趋势的相反方向移动,分向上反转和向下反转。
也可以简单的理解为,突破;跌破都有一个界限。突破:超过界限往好的方向持续发展。
跌破:超过界限往不好的方向持续走低。
反转:指股价出现逆转,空头与多头出现很大的差距
借助栈实现单链表上的逆置运算
栈先入后出,链表从投开始遍历;所以如栈然后再依握穗含次出栈就完成了逆置;
现写的族老,没有测试,不过应该没问题:
#define int ElemType
typedef struct Node{
ElemType data;
Node *next;
}Node, *List;
List reverseList(List head)
{
assert(head);
if (head-next == NULL) //如果链表长度为1,就不需要利用栈了
return head;
stackList listS;
//从头开始入栈
while (head != NULL)
{
listS.push(head);
head = head-next;
}
//出栈
List pHead = listS.top(); //段笑保存头节点
List pre = NULL , cur = NULL; //当前节点和前一个节点
while(listS.size())
{
//如果是第一个节点
if (pre == NULL){
pre = listS.top();
listS.pop();
}
//不是第一个节点
else{
cur = listS.top();
pre-next = cur;
pre = cur;
listS.top();
}
}
pre -next = NULL; //置尾结点的下一个节点为NULL;
return pHead;
}
逆转线性单链表的算法????c++语言
这种网上很多的
你搜单链表逆序
有很多算法。
摘抄了一个
供参考
// 练习:实现单向线性链表的建立、测长、正向打印和// 反向打印// 逆转#include iostreamusing namespace std;class List {public:
// 构造函数中初始化为空链表
List (void) : m_head (NULL), m_tail (NULL) {}
// 析构函数中销毁剩余的节点
~List (void) {
for (Node* next; m_head; m_head = next) {
next = m_head - m_next;
delete m_head;
}
}
// 追加
void append (int data) {
Node* node = new Node (data);
搏掘 if (m_tail)
m_tail - m_next = node;
else
m_head = node;
m_tail = node;
}
// 测长
size_t length (void) const {
size_t len = 0;
for (Node* node = m_head; node;
node = node - m_next)
len++;
return len;
}
// 正向打印
void print (void) const {
for (Node* node = m_head; node;
node = node - m_next)
cout node - m_data ' ';
cout endl;
}
// 反向打印
void rprint (void) const {
rprint (m_head);
cout endl;
}
//逆转
void reverse(void){
reverse(m_head);
swap(m_head,m_tail);
}private:
// 节点
class Node {
public:
Node (int data = 0, Node* next = NULL) :
m_data (data), m_next (next) {}
int m_data; // 数据
Node* m_next; // 后指针
};
// 反向打印以head为首的子链表
void rprint (Node* head) const {
if (head) {//使用递归(也数薯即堆栈方式)实现逆向打印链表
rprint (head - m_next);
cout head - m_data ' ';
}//如果head为空,函数会一层一层的返回
}
void reverse(Node *head){
if(head head-m_next){
reverse(head-m_next);
head-m_next-m_next=head;
head-m_next=NULL;
薯银者 }
}
Node* m_head; // 头指针
Node* m_tail; // 尾指针};int main (void) {
List list;
for (int i = 1; i = 20; i++)
list.append (i);
cout list.length () endl;
list.print ();
list.rprint ();
list.reverse ();
list.print ();
return 0;
}
设有一个带头结点的单链表head,试设计一个算法,将它逆转.要求逆转在原链表上进行
linklist reverse1(linklist head)
{
linklist p,s;
p = head-next;
head-next = NULL;
while(p)
{
s = p;
慧谨 p = p-next;
s-next = 纤碧镇head-next;
毁粗 head-next =s;
}
return head;
}
[img]已知线性表La和Lb中的元素按值非递减排列。归并La和Lb得到新的线性表Lc,Lc的元素也按值非递减排列。
#includeiostream
using namespace std;
#include ctime
typedef int ElemType;
//节点定义
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//手动方式创建链表
LinkList Manual_Create_LinkList(int n)
{ cout"采用手动方式创建链表:"endl;
LinkList _LinkList = new LNode();
if(_LinkList)
{_LinkList-next = NULL;}
for(int i = 0 ; i n ; i++)
{ LinkList p = new LNode();
cout"输入第"(i+1)"个元素:";
cinp-data;
p-next = _LinkList-next;
_LinkList-next = p;
}return _LinkList;}
//自动方式创建链表伏裤带
LinkList Auto_Create_LinkList(int n)
{ cout"采用自动随机数方式创建链表:"endl;
LinkList _LinkList = new LNode();
if(_LinkList)
{_LinkList-next = NULL;}
srand(time(0)); //缺芦seed
for(int i = n; i 0 ; i--)
{
LinkList p = new LNode();
p-data = rand() % 100+ 1;
p-next = _LinkList-next;
_LinkList-next = p;
}
return _LinkList;
}
/*插入非递减有序单向链表*/
void Insert_Sort_LinkList(LinkList _LinkList,ElemType _Var)
{
LinkList _LinkList1,_LinkList2;
_LinkList1 = new LNode();
_LinkList1-data = _Var;
_LinkList2=_LinkList;
while(_LinkList2-next _LinkList2-next-data =_Var)
{_LinkList2 = _LinkList2-next;}
_LinkList1-next = _LinkList2-next;
_LinkList2-next = _LinkList1;
}
//建立非递减有序单向链表
LinkList Manual_Create_Ordered_LinkList(int _int)
{
cout"采用手动方式建立非递减有序单向链表:"endl;
LinkList _LinkList = new LNode();
if(_LinkList)
{_LinkList-next = NULL;}
int i = 0;int j = 0;int k = 0;ElemType _Var;
for(i=0;i_int;i++)
{
cout"输入第"(i+1)"个元素:";
cin_Var;
Insert_Sort_LinkList(_LinkList,_Var);
}
return _LinkList;
}
//销毁链表
void Destroy_LinkList(LinkList *myLinkList)
{
LinkList _LinkList1,_LinkList2;
if(!(*myLinkList))
{cout"链表不存在!"endl;return;}
_LinkList1 = *myLinkList;
while(_LinkList1 != NULL)
{
_LinkList2 = _LinkList1;
_LinkList1 = _LinkList1-next;
delete(_LinkList2);
}
*myLinkList = NULL;
}
//遍历链表
void Traveral_LinkList(LinkList myLinkList)
{
cout"纯塌------------------------------"endl;
cout"遍历链表中的元素:"endl;
int i = 0;
/*第一种遍历方式*/
LinkList _LinkList = myLinkList-next;
while(_LinkList)
{
cout"输出第"(i+1)"个元素:"_LinkList-dataendl;
_LinkList = _LinkList-next;
i++;
}
/*第二种遍历方式*/
/*
LinkList _LinkList;
for(_LinkList = myLinkList-next;_LinkList;_LinkList=_LinkList-next)
{
cout"输出第"i"个元素:"_LinkList-dataendl;
i++;
}
*/
cout"------------------------------"endl;
}
//查找元素
LinkList Locate_LinkList(LinkList myLinkList,ElemType x)
{ while(myLinkList myLinkList-data != x)
{
myLinkList = myLinkList-next;
}
return myLinkList;
}//反转链表
void Reverse_LinkList(LinkList myLinkList)
{
LinkList TempLinkList = NULL;
LinkList _LinkList = myLinkList-next; //指向第一个元素
myLinkList-next = NULL; //指向最后一个元素
while(_LinkList)
{
TempLinkList = _LinkList;
_LinkList = _LinkList-next; //下移
TempLinkList-next = myLinkList-next;
myLinkList-next = TempLinkList;
}
}
/*删除指定元素*/
void Delete_LinkList(LinkList myLinkList,ElemType x)
{
int i = 0;
if(!myLinkList)
{cout"链表不存在!"endl;return;}
/*[Begin]第一种方法*/
/*
LinkList _LinkList1 = myLinkList;
LinkList _LinkList2 = myLinkList-next;
while(_LinkList2 _LinkList2-data != x)
{ _LinkList1 = _LinkList2;
_LinkList2 = _LinkList2-next;
} if(!_LinkList2)
{cout"值没有找到!"endl;return;}
else
{ _LinkList1-next = _LinkList2-next;
delete(_LinkList2);
}
*/
/*[End]第一种方法*/
/*[Begin]第二种方法*/
/**/
LinkList _LinkList = myLinkList;
//循环条件:下个结点不为NULL,并且下个结点不为x
while(_LinkList-next != NULL _LinkList-next-data != x)
{_LinkList = _LinkList-next;}
//判断是否已经循环到最后一个结点
if(_LinkList-next == NULL)
{cout"值没有找到!"endl;return;}
LinkList TempLinkList = _LinkList-next;
_LinkList-next = TempLinkList-next;
delete(TempLinkList);
/*[End]第二种方法*/
}
void main()
{ LinkList myLinkList;
int i=0;int num = 0;
/*[Begin]手动创建链表--------------------*/
cout"使用手动输入创建链表,输入要创建的链表的元素个数:";
cinnum;
myLinkList = Manual_Create_LinkList(num);
Traveral_LinkList(myLinkList); //遍历链表
/*[End]手动创建链表---------------------*/
/*[Begin]删除元素值---------------------*/
cout"输入要删除的元素值:";
cinnum;
Delete_LinkList(myLinkList,num);
Traveral_LinkList(myLinkList); //遍历链表
/*[End]删除元素值----------------------*/
Destroy_LinkList(myLinkList); //销毁链表
/*[Begin]随机数创建链表---------------------*/
num = 0;
cout"使用随机数创建链表,输入要创建的链表的元素个数:";
cinnum;
myLinkList = Auto_Create_LinkList(num);
Traveral_LinkList(myLinkList); //遍历链表
/*[End]随机数创建链表----------------------*/
/*[Begin]链表元素反转---------------------*/
cout"将随机数创建的链表元素反转:";
Reverse_LinkList(myLinkList);
Traveral_LinkList(myLinkList); //遍历链表
/*[End]链表元素反转----------------------*/
Destroy_LinkList(myLinkList); //销毁链表
/*[Begin]建立非递减有序单向链表---------------------*/
cout"使用手动输入建立非递减有序单向链表,输入要创建的链表的元素个数:";
cinnum;
myLinkList = Manual_Create_Ordered_LinkList(num);
Traveral_LinkList(myLinkList); //遍历链表
/*[End]建立非递减有序单向链表----------------------*/
} 这是可执行程序,希望能帮到你
关于链表反转和c实现链表反转的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。