单链表的翻转

来源:互联网 发布:九年级下册历史书淘宝 编辑:程序博客网 时间:2024/04/24 20:38
//单链表翻转非递归法,返回翻转之后的头结点//方法一、带有头指针的单链表,原理:将第二个节点到最后一个节点依次插入到头结点之后ListNode* ListReverse(ListNode *head){  if(head==NULL)     return NULL;  ListNode *h=head;  ListNode *p=h->next;  h->next=NULL;//暂时将头结点与后面的结点断开  while(p!=NULL)  {    ListNode *q=p->next;//保存p结点之后的结点p->next=h->next;  //将第二个节点到最后一个节点依次插入到头结点之后h->next=p;p=q;  }  return h;}//方法二、无头结点的单链表,原理:改变指针指向。//前一结点,当前结点,后一节点————>>当前结点的指针域指向前一结点ListNode* ListReverse(ListNode* head){  ListNode *newhead=NULL;  ListNode *pNode=head;  ListNode *preNode=NULL;    while(pNode!=NULL)  {    ListNode *nextNode=pNode->next;if(nextNode==NULL)    newhead=pNode;//指定新的头结点为最后一个节点pNode->next=preNode;//当前结点指针指向前一结点preNode=pNode;pNode=nextNode;  }  return newhead;}//方法三、带有头结点的单链表//原理:STEP1::判断为空或者一个结点;STEP2:先遍历head->next为首的链表,得到一个新的头结点//STEP3:把原来的头结点加到新链表的尾部。即把head赋值给head->next->next,head->next为空。//STEP4:返回新的头结点newhead.ListNode* ListReverse(ListNode *head){   if(head==NULL||head->next==NULL)     return head;   ListNode *newhead=ListReverse(head->next);   head->next->next=head;   head->next=NULL;   return newhead;   }

0 0
原创粉丝点击