链表创建及反转

来源:互联网 发布:如何查看tcp端口 编辑:程序博客网 时间:2024/06/05 08:28

反转后,为啥不能打印链表头head->data  ???

#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct ListNode* List;struct ListNode{int val;struct ListNode* next;};参考别人代码List reverseList2(List head) {List last=0,next=0;while(head){next = head->next;head->next = last;last = head;head = next;}return last;}//原来理解中的反转/*List reverseList(List head){List h, p, q, t=NULL;        if(head == NULL || head->next==NULL)        return NULL;        h = head;    p = h->next;    q = p->next;    while(q){        t = q->next;q->next = p;p = q;q = t;    }    h->next->next=NULL;    h->next = p;        return h;}*/实际实现反转List reverseList(List head){List p,t;if(!head)return NULL;p = head->next;head->next = NULL;while(p){t = p->next;p->next = head;head = p;p = t;}return head;}
创建链表头插法List CreateListHead(List head, int* data, int size){List p;int i;head = (List)malloc(sizeof(struct ListNode));head->next = NULL;for(i=0;i<size;i++){p = (List)malloc(sizeof(struct ListNode));p->val = data[i];p->next = head->next;head->next = p;}return head;}//创建链表尾插法List CreateListTail(List head, int* data, int size){List p,q;int i;head = (List)malloc(sizeof(struct ListNode));//head->next=NULL;p = q = head;for(i=0;i<size;i++){p = (List)malloc(sizeof(struct ListNode));//p->next = NULL;p->val = data[i];q->next = p;q = p;}p->next = NULL;return head;}void printlist( List L ){     List p = L;     while (p) {           printf("%d ", p->val);           p = p->next;     }     printf("\n");}int main(){List h=NULL;int data[]={1,2,3,4,5,6,7,8,9}, n;n = sizeof(data)/sizeof(int);h = CreateListTail(h, data, n);printlist(h->next);h = reverseList(h->next);printlist(h);return 0;}


原创粉丝点击