- 题目:
设计一个算法,要求将链表中所有节点的链接方向“原地”逆转,即要求仅利用原表的存储空间。
- 对于这个问题,首先要分析的是:链表中的头和尾节点如何插入?其次就是:如何链接?
搞懂这两个的问题,问题就迎刃而解了。
- 这次用的代码,就是:c++软件。
先写主函数,则代码为:
int main()
{LinkList LA;LinkList LC;int n;cout << "请输入需要创建单链表的长度:" << endl;cin >> n;cout << "请依次输入需要存入的数据(尾插法):" << endl;CreateList(LA, n);//函数的声明cout << "单链表A为:";display(LA);LC = new LNode;LC->next = NULL;//必须保证所创造的空间为空VerList_L(LA, LC);display(LC);return 0;
}
此对应的就是:主函数的代码。
- 首先就是创建一个新的链表,也就是对GeateList(LA,n)进行声明和调用。则代码为:
//创建链表
int CreateList(LinkList &L,int n)
{LNode* p, * r;int i;L = new LNode;//新建一个空间L->next = NULL;//指向空指针r = L;for (i = 0; i < n; i++){p = new LNode;cin >> p->data;p->next = NULL;r->next = p;r = p;}return 0;
}
- 接下来就是:输出链表,则代码为:
//输出链表
void display(LinkList L)
{LNode* p;p = L->next;cout << "(";while (p){cout << p->data << "";p = p->next;cout << ")" << endl;}}
- 最后一步,逆转,则代码为:
//逆转
int VerList_L(LinkList &LA,LinkList &LC)
{LNode* pa;LNode* pc;pa = LA->next;pc = LC;while (pa){pc = pa;pa = pa->next;pc->next = LC->next;LC->next = pc; //插入到表头}delete LA;
}
- 这个就是这道题目的解题过程,如有错,请君指点。