【题目】
分别实现反转单向链表和反转双向链表的函数。
【要求】
如果链表长度为N,时间复杂度要求为O(N),额外空间复杂度要求为O(1)。
【解答】
反转单向链表,参考博客:https://blog.csdn.net/xyh269/article/details/70238501
【代码实现1-单向链表】
struct Node
{
int value;
Node *next;
Node(int data){
value = data;
}
};
static Node *reverseList(Node *head){
Node *pre = nullptr;
Node *next = nullptr;
while (head != nullptr)
{
next = head->next;
head->next = pre;
pre = head;
head = next;
}
return pre;
}
【代码实现2-双向链表】
struct DoubleNode{
int value;
DoubleNode *last;
DoubleNode *next;
DoubleNode(int data){
value = data;
}
};
static DoubleNode *reverseDoubleList(DoubleNode *head){
DoubleNode *pre = nullptr;
DoubleNode *next = nullptr;
while (head != nullptr)
{
next = head->next;
head->next = pre;
head->last = next;
pre = head;
head = next;
}
return pre;
}
【来源】
《程序员代码面试指南(IT名企算法与数据结构题目最优解)》左程云