您的位置:首页 > 其它

课程【单链表的部分逆置】

2016-08-10 09:19 113 查看
给定一个固定的单链表,输入两个数begin和end。将下标为begin到end之间的内容逆置。

给定的单链表为: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: