示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL
限制0 < 节点个数 < 5000
二、解决方法
1.头插法
struct ListNode* reverseList(struct ListNode* head){if(headNULL||head->nextNULL){//判断链表长度若为0或1则直接返回headreturn head;}struct ListNode* temphead->next;//临时中间结点head->nextNULL;//头结点初始指向NULLwhile(temp!NULL){struct ListNode* curtemp;//获取当前结点 temptemp->next;//获取下一结点cur->nexthead;//将头结点拼接在当前结点之后headcur;//赋值新的头结点}return head;}
2.迭代法官方题解
struct ListNode* reverseList(struct ListNode* head){struct ListNode* preNULL;//前一个结点struct ListNode* curhead;//当前结点while(cur){//当前结点不为NULL时struct ListNode* nextcur->next;//下一节点//三结点更新cur->nextpre;precur;curnext;}return pre;}
3.递归法(官方题解)
struct ListNode* reverseList(struct ListNode* head) {if (head NULL || head->next NULL) {//递归中止条件return head;}struct ListNode* newHead reverseList(head->next);//新头结点head->next->next head;//反转当前head结点和head->next的指向head->next NULL;//将head->next断链防止成环return newHead;}【本文来源:韩国服务器 http://www.558idc.com/kt.html欢迎留下您的宝贵建议】