206. 反转链表
难度简单
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
思路:才疏学浅,刚看过这道题之后,首先是想起了使用冒泡排序,遍历,替换元素。
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* reverseList(struct ListNode* head){ if(head==NULL) return; int len,i,j,temp; struct ListNode *p=head; for(len=0;p->next!=NULL;len++) p=p->next; j=len; for(i=len;i!=0;i--){ p=head; for(j=0;j<i;j++){ temp=p->val; p->val=p->next->val; p->next->val=temp; p=p->next; } } return head; }
根据提示,研究了迭代的算法。
struct ListNode* reverseList(struct ListNode* head) { if(head==NULL) return NULL; struct ListNode *h1,*h2,*h3; h1=NULL; h2=head; h3=head->next; while(h2!=NULL) { h2->next=h1; h1=h2; h2=h3; h3=h2->next; } return h2; }