反转单链表

单链表逆置,超级热门的面试题,感觉最近见的比较多啊

一种方法是非递归,一种方法是递归

非递归方法:

#include <iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;

/*链表结构体*/
struct Node{
    int data;
    struct Node* next;
};
static void reverse(struct Node** head_ref){                 //函数形参采用双指针,即指针的指针,至于为什么要用双指针,可以看主函数的调用情况
  /*建立三个结构体指针*/
struct Node* prev =NULL; struct Node* current =*head_ref; struct Node* next; while(current!=NULL){ next =current->next; current->next=prev; prev=current; current=next; } *head_ref=prev; }
/*头插法增加节点*/
void push(struct Node** head_ref,int new_data){ struct Node* new_node= (struct Node*)malloc(sizeof(struct Node)); new_node->data=new_data; new_node->next=(*head_ref); (*head_ref)=new_node; }
/*打印节点*/
void printList(struct Node *head){ struct Node *temp=head; while(temp!=NULL){ cout<<temp->data<<" "; temp=temp->next; } }
int main() { struct Node *head=NULL; push(&head,2); push(&head,4); push(&head,6); push(&head,8); printList(head); reverse(&head); cout<<endl; printList(head); return 0; }

 

posted @ 2017-09-04 23:47  uMBrELlAmRx  阅读(147)  评论(0编辑  收藏  举报