鏈表算是常出的題型之一吧(?
今天先整理出相對直觀好理解的題目,明天補上比較需要思考的
鏈表也不需要多介紹了,直接上題目整理
206.反轉鏈表
這個應該是講到爛了..但還是寫一下吧
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==nullptr||head->next==nullptr){
return head;
}
//2->1->3
//2<-1<-3
ListNode* f = nullptr, *c = head, *c_next = head->next;
while(c){
c_next = c->next;
c->next = f;
f = c;
c = c_next;
}
return f;
}
};
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==nullptr||head->next==nullptr){
return head;
}
//2-> 1<-3<-5
//1<-3<-5<-2
ListNode* new_head = reverseList(head->next);//返回子鏈的head節點
head->next->next = head;
head->next = nullptr;
return new_head;
}
};
21.合併有序鏈表
這題在排序的文章中講過了,就不寫了
160.相交鏈表
這題很有趣,從兩端開始走,走到底就到另一端的頭部,最後相遇就是交點!!
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(headA==nullptr||headB==nullptr){
return nullptr;
}
ListNode* pA = headA, *pB = headB;
while(pA!=pB){
pA = pA==nullptr?headB:pA->next;
pB = pB==nullptr?headA:pB->next;
}
return pA;
}
};