方法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; }