用c写算法1[逆置链表]
题目: 输入一个链表的头结点,反转该链表并输出反转后链表的头结点
解法:
循环版本:
// 循环版本逆转链表 LISTNODEPTR reverseList1(LISTNODEPTR * head) { // LISTNODEPTR frontptr = *head, backptr = *head; LISTNODEPTR frontptr, backptr; frontptr = backptr = *head; if (*head == NULL) { return NULL; } if (*head->next = NULL) { return *head; } frontptr = (*head)->next; while (frontptr) { tempptr = frontptr->next; backptr->next = frontptr->next; frontptr->next = *head; *head = frontptr; frontptr = tempptr; } }
递归版本:
LISTNODEPTR reverseList2(LISTNODEPTR head) { LISTNODEPTR subptr; if(head->next == NULL) { reverseListHead = head; //用全局变量reverseListHea记录原链表的尾部,也就是逆转后的链表的头部 return head; } else { subptr = reverseList2(head->next); subptr->next = head; head->next = NULL; return head; } }
需要注意的是需要用一个全局变量标记下逆转后链表的头部
posted on 2013-03-26 17:11 jiyiyouxin 阅读(192) 评论(0) 编辑 收藏 举报