您的位置:首页 > Web前端

(C++)剑指offer-15:反转链表(代码的鲁棒性)

2018-02-13 13:32 633 查看

剑指offer-15:反转链表

目录

剑指offer-15反转链表

目录
1题目描述

2题目解析

3题目答案

1题目描述

输入一个链表,反转链表后,输出链表的所有元素。



2题目解析

每次循环的情况写出来,假设初始链表是 0 -> 1 -> 2 -> 3 -> 4

// 0 -> 1 -> 2 -> 3 -> 4 oldHead指向0, newHead指向0,toBeReversed指向1

// 1 -> 0 -> 2 -> 3 -> 4 oldHead指向0, newHead指向1,toBeReversed指向2

// 2 -> 1 -> 0 -> 3 -> 4 oldHead指向0, newHead指向2,toBeReversed指向3

// 3 -> 2 -> 1 -> 0 -> 4 oldHead指向0, newHead指向3,toBeReversed指向4

// 4 -> 3 -> 2 -> 1 -> 0 oldHead指向0, newHead指向4,toBeReversed指向null



3题目答案

从原链表的头部一个一个取节点并插入到新链表的头部

原01234,

取1放在头部,10234

取2放在头部,21034

取3放在头部,32104

取4放在头部,43210

/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if (pHead == NULL) return NULL;  //代码的鲁棒性

ListNode* head = pHead;
pHead = pHead->next;
head->next = NULL;
//假设原链表为: 0->1->2->3->4,pHead指向0
//上面三行之后:0->NULL 1->2->3->4, head指向0,pHead指向1

//pHead不断向右取,直到pHead=NULL,终止循环
while (pHead) {
ListNode* next = pHead->next;
//第一次进入循环时,0->NULL 1->2->3->4,head指向0,phead指向1,next指向2

pHead->next = head;//(1的next为0,即)
head = pHead;      //head指向了1
pHead = next;      //pHead指向了2
//第一次进入循环时, 1->0->2->3->4

//其中head始终指向新链表的头部,pHead始终指向(要拿出来放在新链表头部)的位置
}
return head;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: