题目:反转链表
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
C语言解题
解法一:递归
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* reverseList(struct ListNode* head) {
if(head==NULL||head->next==NULL)
return head;
struct ListNode *h=reverseList(head->next);
head->next->next=head;
head->next=NULL;
return h;
}
解法二:
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode *h=head,*temp=NULL,*p=head;
while(h!=NULL)
{
h=h->next;
p->next=temp;
temp=p;
p=h;
}
return temp;
}