思路1: 新建一个链表,把list每个节点插入在新链表的头部。此新链表即是所求
LNode*reverseLinkList(LinkList list)
{
if(list==NULL||list->next==NULL) {
returnlist;
}
LNode*node =NULL;
LNode*temp = list;
while(temp!=NULL) {
LNode*current = temp;
temp = temp->next;
if(node ==NULL) {
current->next=NULL;
}else
{
current->next= node;
}
node = current;
}
printLinkList(node);
return node;
}
思路二:迭代实现
LNode*reverseByDieDai(LNode*head)
{
LNode *a = NULL;//a为已完成反转的头指针
LNode *b = head;//b为未完成反转的链表的首节点指针
LNode *c = NULL;//c为未完成反转的链表的第二个指针
while(b!=NULL) {
c = b->next;
b->next= a;
a = b;
b = c;
}
printLinkList(a);
return a;
}
思路三:递归实现
LNode*reverseLinkListByRe(LNode* head)
{
if(!head||head->next==NULL) {
returnhead;
}
LNode*current = head;
LNode*reverse =reverseLinkListByRe(current->next);
current->next->next= current;
current->next=NULL;
return reverse;
}
网友评论