c带头结点的单链表逆置

头插法
顺序遍历单链表,将遍历的每个节点插到头结点后面。
/*
带头结点的单链表逆置 
*/
#include<stdio.h>
#include<stdlib.h>
struct node{
    int data;
    struct node* next;
};
struct node* creat(){    //构造单链表 
    int i;
    struct node* head;
    struct node* q;
    head = (struct node*)malloc(sizeof(struct node));
    head->next = NULL;
    q = head;
    for(i = 0;i < 20;i++){
        struct node* p = (struct node*)malloc(sizeof(struct node));
        p->data = i;
        q->next = p;
        q = p;
        q->next = NULL; 
    }
    head->data = i;        //头结点存储节点个数 
    output(head);    //打印 
    return head;
}
void output(struct node* head){
    struct node* p;
    p = head;
    while(p != NULL){
        printf("%d ",p->data);
        p = p->next;
    }
    printf("\n");
}
struct node* ReverseLink(struct node *head){    
//单链表逆置函数,返回头指针 
    if((head == NULL) || (head->next == NULL))    
        return head;    
//如果只有头节点或者只有一个头结点和一个数据节点,不用逆置 
    struct node* cur;
    struct node* temp;
    cur = head->next->next;
    head->next->next = NULL;
      while(cur){
          temp = cur->next;
          cur->next=head->next;
          head->next=cur;
          cur = temp;
      }
    return head;
}
int main(){
    struct node* head = creat();
    head = ReverseLink(head);
    output(head);
}
View Code

 

posted @ 2018-03-08 18:22  JQS  阅读(1218)  评论(0编辑  收藏  举报