题目描述
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
注:本题链表无头结点哦!
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
C ++代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *curr = head, *pre = NULL;//curr指向当前结点,pre指向上一个结点
while(curr != NULL){
ListNode *tmp = curr -> next;//tmp指向下一个结点
curr -> next = pre;//当前结点的链域指向前一个结点
pre = curr;//pre指针后移
curr = tmp;//当前指针后移
}
return pre;
}
};
C ++ 代码2
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head == NULL) return head;
ListNode *p, *r;
p = head -> next;//p指向第二个元素结点
head -> next = NULL;//处理第一个元素结点
while(p != NULL){//从第二个元素结点开始处理
r = p -> next;//r暂存p后一个结点
p -> next = head;//当前结点的链域指向前一个结点
head = p;//head指针后移
p = r;//p指针后移
}
return head;
}
};