解题报告
二进制链表转整数
题目链接:1290. 二进制链表转整数
解题思路
遍历链表,根据二进制转十进制的方法计算。
解题代码
class Solution {
public:
int getDecimalValue(ListNode* head) {
int sum = 0;
while(head){
sum = sum * 2 + head -> val;
head = head -> next;
}
return sum;
}
};
删除链表中的节点
题目链接:237. 删除链表中的节点
解题思路
因为不知道要删除的节点的前驱,可以把该节点的下一个节点值赋给该节点,再删除该节点的下一个节点。
解题代码
class Solution {
public:
void deleteNode(ListNode* node) {
node -> val = node -> next -> val;
node -> next = node -> next -> next;
}
};
反转链表
解题思路
设置了三个指针
prev:指向当前节点的前一个节点。
cur:指向当前节点,反转时cur -> next = prev
。
cNext:指向cur的下一个结点,保留cur的下一个节点,防止反转后找不到cur后的节点。
反转cur节点后,prev = cur, cur = cNext
,cur继续向后遍历,prev继续指向cur的前一个。
最终反转结果例如:head = [1,2,3,4,5],1->2->3->4->5->null,变成 null<-5<-4<-3<-2<-1。
解题代码
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* prev = NULL;
ListNode* cur = head;
while (cur != NULL){
ListNode* cNext = cur -> next;
cur -> next = prev;
prev = cur;
cur = cNext;
}
return prev;
}
};
链表中的下一个更大节点
题目链接:1019. 链表中的下一个更大节点
解题思路
解题代码