课程【单链表的部分逆置】
2016-08-10 09:19
113 查看
给定一个固定的单链表,输入两个数begin和end。将下标为begin到end之间的内容逆置。
给定的单链表为:0->2->4->6->8->10->12->14->16->18
测试数据确保begin和end不会超出单链表的长度范围,并且end>=begin
注意begin可能为0---这时应该让head=end-.-
代码:
#include <iostream>
using namespace std;
struct List
{
int num;
List *next;
};
List *head;
void reverse(int begin, int end, List *&head)
{
//在这个函数中编写你的代码
List *p= head;
List *q=NULL;
List *qian;
List *hou;
List * kai;
for (int i=0;i<=end;i++)
{
if (i==begin-1)
{
q=p;
qian=p;
p=p->next;
}
else if (i>=begin)
{
if (i==begin)
{
kai=p;
}
hou=p;
p=p->next;
hou->next=qian;
qian=hou;
if (i==end)
{
if(q==NULL)//注意
{
head=hou;
}
else
q->next=hou;
kai->next=p;
}
}
else
p=p->next;
}
}
List *Create()
{
List *p = NULL;
List *q = NULL;
head = NULL;
for ( int i = 0; i < 10; i++ ) {
p = new List;
p->num = i * 2;
if ( head == NULL ) {
head = p;
}
else {
q->next = p;
}
q = p;
}
if ( head != NULL ) {
q->next = NULL;
}
return head;
}
void displayList(List *head)
{
while ( head != NULL ) {
cout << head->num;
head = head->next;
if ( head != NULL ) {
cout << "->";
}
}
cout << endl;
}
int main() {
Create();
int begin, end;
cin >> begin >> end;
reverse(begin, end, head);
displayList(head);
return 0;
}
给定的单链表为:0->2->4->6->8->10->12->14->16->18
测试数据确保begin和end不会超出单链表的长度范围,并且end>=begin
样例输入
2 4
样例输出
0->2->8->6->4->10->12->14->16->18
注意begin可能为0---这时应该让head=end-.-
代码:
#include <iostream>
using namespace std;
struct List
{
int num;
List *next;
};
List *head;
void reverse(int begin, int end, List *&head)
{
//在这个函数中编写你的代码
List *p= head;
List *q=NULL;
List *qian;
List *hou;
List * kai;
for (int i=0;i<=end;i++)
{
if (i==begin-1)
{
q=p;
qian=p;
p=p->next;
}
else if (i>=begin)
{
if (i==begin)
{
kai=p;
}
hou=p;
p=p->next;
hou->next=qian;
qian=hou;
if (i==end)
{
if(q==NULL)//注意
{
head=hou;
}
else
q->next=hou;
kai->next=p;
}
}
else
p=p->next;
}
}
List *Create()
{
List *p = NULL;
List *q = NULL;
head = NULL;
for ( int i = 0; i < 10; i++ ) {
p = new List;
p->num = i * 2;
if ( head == NULL ) {
head = p;
}
else {
q->next = p;
}
q = p;
}
if ( head != NULL ) {
q->next = NULL;
}
return head;
}
void displayList(List *head)
{
while ( head != NULL ) {
cout << head->num;
head = head->next;
if ( head != NULL ) {
cout << "->";
}
}
cout << endl;
}
int main() {
Create();
int begin, end;
cin >> begin >> end;
reverse(begin, end, head);
displayList(head);
return 0;
}
相关文章推荐
- 左神的书——《程序员代码面试指南》之逆置单链表的部分节点 c++实现
- 单链表的逆置操作
- hadoop 部分学习课程 持续更新
- 左程云_算法与数据结构 — 链表问题 — 05反转部分单链表
- 一、HTML和CSS基础--HTML+CSS基础课程--第2部分
- RHCE课程-初级部分4、history命令、BASH、快捷键
- 单链表的增删查 逆置 倒数第k个节点等问题
- 设A和B是两个单链表,其表中元素递增有序,使用一算法将A和B归并成一个案元素递减有序的单链表C(该程序中的功能包含了上几个博客中的部分功能)
- 第四周 项目3(1)-单链表应用 逆置单链表
- 17_7_14:逆置单链表+查找单链表的倒数第K个节点+非常规方法实现Add函数
- 教学思路SQL之预备课程学习 建库、建表、建约束、关系、部分T-sql语句
- RHCE课程-初级部分2 安装LINUX及常用命令介绍(转)
- 单链表逆序(就地逆置和头插)
- 单链表的创建、排序、逆置等
- 单链表中头结点的有无. 并讨论下有无头结点在单链表的创建,打印,插入,逆置,删除中的区别.
- 【数据结构】单链表—逆置单链表
- 吴恩达deeplearning第五部分课程笔记
- 单链表的逆置-C++实现
- 单链表的逆置或者反转
- 一、HTML和CSS基础--HTML+CSS基础课程--第3部分