Total Accepted: 86124
Total Submissions: 225095
Difficulty: Easy
Reverse a singly linked list.
第一个想到的是栈,把每个节点依次存入,在出栈变可直接获得答案 ;
代码如下 :
class Solution {
public:
ListNode* reverseList(ListNode* head) {
stack<ListNode*>stk ;
if ( head == NULL )
return NULL ;
while (head){
stk.push(head) ;
head = head -> next ;
}
ListNode *p , *q , *resHead ;
p = resHead = stk.top() ;
stk.pop() ;
while (stk.size() > 0 )
{ q = stk.top() ;
if (p == resHead) {
p = resHead ->next = q ;
stk.pop() ;
}
else {
p -> next = q ;
p = q ;
stk.pop() ; }
}
p -> next = NULL ;
return resHead ;
}
}; // 容易理解,但是代码太长 ;
后来想到另外一种方法 。直接把新的头结点移动就行了 ,诶。
<pre name="code" class="cpp">class Solution {
public:
ListNode* reverseList(ListNode* head) {
if ( head == NULL )
return NULL ;
ListNode *pre=NULL , *q=head , *tmp=NULL;
while (q){
tmp = q->next; // 要保存下一个节点,不然整个链表就断了 ;
q -> next = pre ;
pre = q ;
q = tmp ;
}
return pre ;
}
};