单链表的转置

今天我们的任务是讲一讲单链表中的一个重要应用,单向链表的就地逆转。大概题意是这样叙述的;首先给定一个单向链表L,要求我们设计一个函数将链表L就地逆转,即不需要申请新的结点,将链表的第一个元素转为最后一个元素,第二个元素转为倒数第二个元素,然后以此类推,看到这个问题我们首先要明白的是解决这个问题的基本思路是什么,那就是利用循环,从链表头开始逐个处理。我们先设想一下这个的场景:就是在每轮循环开始前我们都是面临两个链表,其中Old_head是一个待逆转的链表(即“旧”的链表头),而New_head是一个已经逆转好的链表(即“新”的链表头),而每轮循环的目地是把Old_head中的第一个元素插入到New_head的头上,这轮循环执行好后,Old_head和New_head还是分别指向新的待逆转的链表和已经逆转好的链表。再循环执行前,Old_head和New_head都应该初始化,即:待逆转的链表Old_head就是原始链表,已经逆转好的链表New_head开始时为空。而循环结束后,需要将逆转后的链表头指针(New_head )返回,而循环的主体部分就是将Old_head的第一个元素插入到New_head头上,同时更新Old_head和New_head的值,当将Old_head 的第一元素插入到New_head头上后,我们需要用一个临时变量Temp来记录Old_head链表新的表头在哪里,我们给出逆转函数的代码

List Reverse(List L)
{
PtrToNode  Old_head,New_head,Temp;
Old_head=L;
New_head=NULL;
while(Old_head){
Temp=Old_head->Next;
Old_head->Next=New_head;
New_head=Old_head;
Old_head=Temp;
}
L=New_head;
return L;
}

猜你喜欢

转载自www.cnblogs.com/zxx-521/p/10957516.html