資料結連結串列系列(詳細解析)
阿新 • • 發佈:2019-02-06
目錄
前沿:本系列有關連結串列系列的題,會持續更新,題目主要來自於leetcode和lintcode,有需要可以參考一波,語言用的C++,當然如果有需要java版的,可以評論區留言,或者私發博主。
leetcode21. 合併兩個有序連結串列
將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。
示例:
輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4
思路:注意連結串列為空時的情況,當都不為空,使用迭代是一個比較快的解決方案
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { if (l1 == NULL&&l2 == NULL) { return NULL; } if (l1 == NULL) { return l2; } if (l2 == NULL) { return l1; } ListNode *head = NULL; if (l1->val > l2->val) { head = l2; head->next = mergeTwoLists(l1, l2->next); } else { head= l1; head->next = mergeTwoLists(l1->next, l2); } return head; } };
lintcode452. 刪除連結串列中的元素
刪除連結串列中等於給定值val
的所有節點。
您在真實的面試中是否遇到過這個題? 是
樣例
給出連結串列 1->2->3->3->4->5->3
, 和 val = 3
, 你需要返回刪除3之後的連結串列:1->2->4->5
。
思路:lintcode頭結點是從第一個節點算起,所以跟普通連結串列題 有點不一樣。首先要判斷連結串列是否為空,是的話直接返回,然後考慮到單鏈表的刪除需要兩個指標變數的配合作用,那麼就要來定義兩個變數
/** * Definition of singly-linked-list: * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */ class Solution { public: /** * @param head: a ListNode * @param val: An integer * @return: a ListNode */ ListNode * removeElements(ListNode * head, int val) { // write your code here if(head==NULL) return head; ListNode *first=head,*second=head->next; while(second!=NULL) { if (second->val==val) { first->next=second->next; second=first->next; //連結串列往後走 } else { first=first->next; second=second->next;//連結串列往後走,注意兩句的不同 } } if(head->val==val) head=head->next; return head; } };
Lintcode 35.翻轉連結串列
翻轉一個連結串列
您在真實的面試中是否遇到過這個題? 是
樣例
給出一個連結串列1->2->3->null,這個翻轉後的連結串列為3->2->1->null
挑戰
在原地一次翻轉完成
思路:我們將表頭摘下,從第一個節點開始,一次前插入頭結點的後面,直到最後一個位置。時間複雜度O(1),。
LinkList Reverse(LinkList &L)
{
if (L == NULL)
{
return L;
}
else {
LNode *p = L->next,*last;
L->next = NULL;
while (p)
{
last = p->next;
p->next = L->next;
L->next = p;
p = last;
}
return L;
}
}