LinkList Reverse_1(LinkList L) { //传入链表的头结点 LNode *p, *r; //p为工作指针,r为p的后继,以防断链 p = L->next; //从第一个元素节点开始 L->next = NULL; //先将L的next域置为NULL while(p! = NULL) { r=p->next; // 暂存p的后继 /* 后两句语句就是头插法建立单链表的操作*/ p->next = L->next; L->next = p; p = r; //更新指针p,遍历整个单链表 } return L; }
解法2
LinkList Reverse_2(LinkList L){ //依次遍历线性表,并将结点指针反转 LNode *pre, *p=L->next, *r=p->next; p->next = NULL; //处理第一个结点 链表反转后,第一个结点变为最后一个结点,其next域为NULL while(r!= NULL){ /* 后三句依次更新指针,遍历单链表*/ pre = p; p = r; r = r->next; p->next = pre; //反转指针 } L->next = p; //处理最后一个结点,链表反转后,最后一个结点变为第一个结点,L->next要指向其 return L; }