方法1:使用3个指针遍历单链表,逐个结点进行反转。
方法2:从第2个节点到第N个节点,依次逐节点插入到第head节点之后(针对有。
法一:逐个结点反转
1)将指针a,b,c依次赋值为连续的三个指针
2)原链表的第一个结点翻转后为最后一个结点,将原链表的第一个结点的next 赋值NULL
3)把b->next 赋值为a,改变指针方向; 将b 赋值为 c,a赋值为b,c赋值为c->next ,边界条件:赋值后的a 为空时,L->next = a; 更新新的表头
LinkList ListReverse(LinkList &L)
{
LinkList a = L->next;
LinkList b = a->next;
LinkList c = b->next;
a->next = NULL;
int len = GetLength(L);
while (len--)
{
b->next = a;
c = b;
b = a;
if(!a)
{
L->next=a;
}
else c=c->next;
}
return L;
}
法二:依次插入到头结点之后(代码针对有头结点的链表)
如果是没有头结点的链表,从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,(N-1)次这样的操作结束之后将第1个节点挪到新表的表尾即可
LinkList ListReverse2(LinkList &L)
{
int num;
for (int i=2; i <= GetLength(L); i++)
{
ListDeteleByPos_L(L,i,num);
ListInsert_L(L,1,num);
}
return L;
}