问题描述:
翻转一个链表
样例
给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null
解题思路:
定义一个空节点,让第一个节点指向空,这时第一个节点变成了新链表的尾节点,再将第二个节点之后的链存起来,让第二个节点指向第一个节点,直至使最后一个节点指向倒数第二个节点。
代码实现:
/**
* Definition of ListNode
*
* class ListNode {
* public:
* int val;
* ListNode *next;
*
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: The first node of linked list.
* @return: The new head of reversed linked list.
*/
ListNode *reverse(ListNode *head){
// write your code here
ListNode *l=NULL;
while(head!=NULL){
ListNode *temp=head->next;
head->next=l;
l=head;
head=temp;
}
return l;
}
};
解题感悟:
注意翻转时要记得保存后面的节点,否则会丢失数据。