>>>>>>>>看到别人的方法 ListNode * ReverseList(ListNode * head) { if(head==NULL || head‐>m_pNext==NULL) return head; else { ListNode * newhead=ReverseList(head‐>m_pNext); head‐>m_pNext‐>m_pNext=head; head‐>m_pNext=NULL; return newhead; } }
Node reverse(Node head) { if (head.next == null) return head; else { Node p = head.next; Node q = p.next; head.next = null; while (p != null) { p.next = head.next; head.next = p; p = q; if (q != null) q = q.next; } } return head; }
这个是直接操作链表 link* reverse(link* head) { if(NULL==head) return head; link* p=head,*q=p->next; p->next=NULL; while(q!=NULL) { link* r=q->next; q->next=p; p=q; q=r; } head=p; return head; } 也可以交换链表里值的位置;或者操作链表指针,用倒插法逆置链表.
讲讲思路吧:你所谓的链表肯定是单向链表,所以可以把其当做一般的队列。 可以利用一个栈Stack,队列每弹出一个元素就立即压入Stack,等队列为空时, 再将Stack里面的元素弹出并进入刚才的空队列,等Stack里面的元素全部弹出后, 此时队列里面的元素也就反序了(与原队列相比)。
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题