链表逆置
来源:互联网 发布:毛昆仑 常凯申 知乎 编辑:程序博客网 时间:2024/06/03 15:46
链表逆置有以下几种方法
1.就地逆置
采用头插法
SLink* reverse(SLink *L){ if(L==NULL) return NULL;//如果链表为NULL,则返回NULL else if(L->next ==NULL||L->next->next == NULL) return L;//如果只存在一个头结点或者只存在一个结点,则直接返回L else { SLink *p = L->next,*q; L->next = NULL; while(p!=NULL) { q = p->next; p->next = L->next;//p结点采用头插法加入到头结点之后 L->next = p; p = q;//p指向下一个结点 } return L; }
2.辅助指针实现
SLink* reverse1(SLink *L){ if(L==NULL) return NULL; //如果链表为NULL,则返回NULL else if(L->next == NULL || L->next->next == NULL) return L; //如果链表只有一个头结点或者只有一个数值结点,则直接返回L else { SLink *pre, *p, *q; pre = L -> next; //pre指向第一个结点 p = pre -> next; //p指向pre下一个结点 q = p -> next; //q指向p下一个结点 L -> next = NULL; //将头节点先指向NULL pre -> next = NULL; //pre指向的第一个结点逆置后将成为最后一个结点,所以指向NULL while(p != NULL) { p -> next = pre; //p结点逆置后指向前一个结点pre pre = p; //pre向前指向下一个结点p p = q; //p向前指向下一个结点q q = q -> next; //q指向下一个结点 } L->next = pre; //现在pre指向逆置完后的第一个结点,所以头结点由指向NULL转为指向pre return L; }}
欢迎讨论指正
0 0
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 链表逆置
- 《JavaScript高级程序设计》--BOM
- Intellj Idea 2016 快速搭建javaweb,Tomcat项目
- 《JavaScript高级程序设计》--继承
- SSM框架注解整合
- 《JavaScript高级程序设计》--创建对象1
- 链表逆置
- 【Untiy&摄像机视角】
- ex44 继承还是组成
- Linux中常用操作命令
- 内核开发:实现切换窗口后的键盘输入
- 1112. Stucked Keyboard (20)
- display:inline-block和元素水平居中的关系
- Trie树标准模版
- 1104. Sum of Number Segments (20)