国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ

這篇具有很好參考價(jià)值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目一:移除鏈表元素

OJ
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法
方案一:

題目解析:
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

代碼演示:
struct ListNode
{
    int val;
    struct ListNode* next;
};
struct ListNode* removeElements(struct ListNode* head, int val)
{
    struct ListNode* cur = head, * prev = NULL;
    while (cur)
    {
        if (cur->val == val)
        {
            if (cur == head)
            {
                head = cur->next;
                free(cur);
                cur = head;
            }
            else
            {
                prev->next = cur->next;
                free(cur);
                cur = prev->next;
            }
        }
        else
        {
            prev = cur;
            cur = cur->next;
        }
    }
    return head;
}

方案二:

題目解析:把原鏈表遍歷一遍,插入新鏈表
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

struct ListNode* removeElements(struct ListNode* head, int val)
{
    struct ListNode* newnode = NULL, * tail = NULL;
    struct ListNode* cur = head;
    while (cur)
    {
        if (cur->val == val)
        {
            struct ListNode* del = cur;
            cur = cur->next;
            free(del);
        }
        else
        {
            if (tail == NULL)
            {
                newnode = tail = cur;
                //tail = tail->next;
            }
            else
            {
                tail->next = cur;
                tail = tail->next;
            }
            cur = cur->next;
        }
    }
    if (tail)
        tail->next = NULL;
    return newnode;
}

題目二:反轉(zhuǎn)鏈表

OJ
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

題目解析:
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

代碼演示:
struct ListNode
{
    int val;
    struct ListNode* next;
};
struct ListNode* reverseList(struct ListNode* head) 
{
    struct ListNode* newnode = NULL, * cur = head;
    while (cur)
    {
        struct ListNode* next = cur->next;
        //尾插
        cur->next = newnode;
        newnode = cur;
        cur = next;
    }
    return newnode;
}

題目三:鏈表的中間節(jié)點(diǎn)

OJ
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

題目解析:
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

代碼演示:
struct ListNode 
{
    int val;
    struct ListNode* next;
};
struct ListNode* middleNode(struct ListNode* head)
{
    struct ListNode* fast = head, * slow = head;
    while (fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
    }
    return slow;
}

題目四:鏈表中倒數(shù)第k個(gè)結(jié)點(diǎn)

OJ
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

題目解析:
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

代碼演示:
struct ListNode
{
    int val;
    struct ListNode* next;
};
struct ListNode* FindKthToTail(struct ListNode* pListHead, int k) 
{
    struct ListNode* fast = pListHead, * slow = pListHead;
    while (k--)
    {
        if (fast == NULL)
            return NULL;
        fast = fast->next;
    }
    while (fast)
    {
        slow = slow->next;
        fast = fast->next;
    }
    return slow;
}

題目五:合并兩個(gè)有序鏈表

OJ
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

題目解析:
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

代碼演示:
struct ListNode 
{
    int val;
    struct ListNode* next;
};
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) 
{
    if (list1 == NULL)
        return list2;
    if (list2 = NULL)
        return list1;
    struct ListNode* tail = NULL, * head = NULL;
    head = tail = (struct ListNode*)malloc(sizeof(struct ListNode));
    while (list1 && list2)
    {
        if (list1->val < list2->val)
        {
            tail->next = list1;
            tail = tail->next;
            list1 = list1->next;
        }
        else
        {
            tail->next = list2;
            tail = tail->next;
            list2 = list2->next;
        }
    }
    if (list1)
        tail->next = list1;
    if (list2)
        tail->next = list2;
    struct ListNode* del = head;
    head = head->next;
    free(del);
    return head;
}

題目六:鏈表分割

OJ
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

題目解析:
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

代碼演示:
struct ListNode 
{
    int val;
    struct ListNode* next;
    ListNode(int x) : val(x), next(NULL) {}
}; 
class Partition
{
public:
    ListNode* partition(ListNode* pHead, int x) 
    {
        struct ListNode* lhead, * ltail, * gtail, * ghead;
        ghead = gtail = (struct ListNode*)malloc(sizeof(struct ListNode));
        lhead = ltail = (struct ListNode*)malloc(sizeof(struct ListNode));
        struct ListNode* cur = pHead;
        while (cur)
        {
            if (cur->val < x)
            {
                ltail->next = cur;
                ltail = ltail->next;
            }
            else
            {
                gtail->next = cur;
                gtail = gtail->next;
            }
            cur = cur->next;
        }
        ltail->next = ghead->next;
        gtail->next = NULL;
        struct ListNode* head = lhead->next;
        free(lhead);
        free(ghead);
        return head;
    }
};

題目七:鏈表的回文結(jié)構(gòu)

OJ
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

題目解析:
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

代碼演示:
struct ListNode 
{
	int val;
	struct ListNode* next;
	ListNode(int x) : val(x), next(NULL) {}
}; 
class PalindromeList
{
public:
	struct ListNode* middleNode(struct ListNode* head)
	{
		struct ListNode* fast = head, * slow = head;
		while (fast && fast->next)
		{
			slow = slow->next;
			fast = fast->next->next;
		}
		return slow;
	}
	struct ListNode* reverseList(struct ListNode* head)
	{
		struct ListNode* newnode = NULL, * cur = head;
		while (cur)
		{
			struct ListNode* next = cur->next;
			cur->next = newnode;
			newnode = cur;
			cur = next;
		}
		return newnode;
	}
	bool chkPalindrome(ListNode* A)
	{
		struct ListNode* mid = middleNode(A);
		struct ListNode* rmid = reverseList(mid);
		while (A && rmid)
		{
			if (A->val != rmid->val)
				return false;
			A = A->next;
			rmid = rmid->next;
		}
		return true;
	}
};

題目八:相交鏈表

OJ
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

題目解析:
定義快慢指針,使快指針先走與慢指針同步。然后同時(shí)走看是否相交
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

代碼演示:
struct ListNode
{

    int val;
    struct ListNode* next;
};
struct ListNode* getIntersectionNode(struct ListNode* headA, struct ListNode* headB) 
{
    struct ListNode* curA = headA, * curB = headB;
    int lenA = 1, lenB = 1;
    while (curA)
    {
        curA = curA->next;
        lenA++;
    }
    while (curB)
    {
        curB = curB->next;
        lenB++;
    }
    if (curA != curB)
        return false;
    int gab = abs(lenA - lenB);
    struct ListNode* longest = headA, * shortest = headB;
    if (lenA < lenB)
    {
        longest = headB;
        shortest = headA;
    }
    while (gab--)
    {
        longest = longest->next;
    }
    while (shortest != longest)
    {
        
        shortest = shortest->next;
        longest = longest->next;
    }
    return longest;
}

題目九:環(huán)形鏈表

OJ

【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

題目解析:
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

代碼演示:
struct ListNode {
    int val;
    struct ListNode* next;
};
bool hasCycle(struct ListNode* head)
{
    struct ListNode* fast = head, * slow = head;
    while (fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
        if (slow == fast)
            return true;
    }
    return false;
}

題目十:環(huán)形鏈表II

OJ
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

題目解析:
【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ,數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),鏈表,OJ,算法

代碼演示:
struct ListNode
{
    int val;
    struct ListNode* next;
};
struct ListNode* detectCycle(struct ListNode* head)
{
    struct ListNode* fast = head, * slow = head;
    while (fast && fast->next)
    {
        slow = slow->next;
        fast = fast->next->next;
        if (slow == fast)
        {
            struct ListNode* meet = slow;
            while(meet != head)
            {
                head = head->next;
                meet = meet->next;
            }
            return meet;
        }
    }
    return NULL;
}

??不知不覺,【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ以告一段落。通讀全文的你肯定收獲滿滿,讓我們繼續(xù)為數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)共同奮進(jìn)!!!文章來源地址http://www.zghlxwxcb.cn/news/detail-753314.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)初階】鏈表OJ的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)——鏈表OJ題

    數(shù)據(jù)結(jié)構(gòu)——鏈表OJ題

    目錄 ? 1.給你一個(gè)鏈表的頭節(jié)點(diǎn)?head?和一個(gè)整數(shù)?val?,請(qǐng)你刪除鏈表中所有滿足?Node.val == val?的節(jié)點(diǎn),并返回?新的頭節(jié)點(diǎn)?。 2.給定一個(gè)帶有頭結(jié)點(diǎn) head 的非空單鏈表,返回鏈表的中間結(jié)點(diǎn)。如果有兩個(gè)中間結(jié)點(diǎn),則返回第二個(gè)中間結(jié)點(diǎn)。 3.變形題:找到鏈表中倒數(shù)第k個(gè)

    2024年02月21日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)OJ題】環(huán)形鏈表

    【數(shù)據(jù)結(jié)構(gòu)OJ題】環(huán)形鏈表

    原題鏈接:https://leetcode.cn/problems/linked-list-cycle/description/ 目錄 1. 題目描述 2. 思路分析 3. 代碼實(shí)現(xiàn) 整體思路: 定義 快慢指針fast,slow ,如果 鏈表確實(shí)有環(huán) , fast指針一定會(huì)在環(huán)內(nèi)追上slow指針。 即慢指針一次走一步,快指針一次走兩步,兩個(gè)指針從鏈表起始位置開始運(yùn)行,

    2024年02月12日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)OJ題】鏈表分割

    【數(shù)據(jù)結(jié)構(gòu)OJ題】鏈表分割

    原題鏈接:https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70?tpId=8tqId=11004rp=2ru=/activity/ojqru=/ta/cracking-the-coding-interview/question-ranking 目錄 1. 題目描述 2. 思路分析 3. 代碼實(shí)現(xiàn) 整體思路: 創(chuàng)建兩個(gè)鏈表 ,分別存放 小于x的結(jié)點(diǎn) 和 大于等于x的結(jié)點(diǎn) , 分別進(jìn)行尾插 。 這道題目使

    2024年02月12日
    瀏覽(16)
  • 數(shù)據(jù)結(jié)構(gòu)——圖解鏈表OJ題目

    數(shù)據(jù)結(jié)構(gòu)——圖解鏈表OJ題目

    ? ? ? ? 學(xué)完了單鏈表之后,我們對(duì)其基本結(jié)構(gòu)已經(jīng)有了一定的了解,接下來我們通過一些題目強(qiáng)化對(duì)鏈表的理解,同時(shí)學(xué)習(xí)一些面試筆試題目的新思路以及加強(qiáng)對(duì)數(shù)據(jù)結(jié)構(gòu)單鏈表的掌握。? 目錄 題目一.876. 鏈表的中間結(jié)點(diǎn) - 力扣(LeetCode) 題目二:21. 合并兩個(gè)有序鏈表

    2024年02月04日
    瀏覽(20)
  • 初階數(shù)據(jù)結(jié)構(gòu):鏈表

    初階數(shù)據(jù)結(jié)構(gòu):鏈表

    經(jīng)過學(xué)習(xí)與練習(xí),已經(jīng)掌握了順序表的相關(guān)知識(shí)并且能夠自我實(shí)現(xiàn)。在這一過程中,通過對(duì)其結(jié)構(gòu)的實(shí)現(xiàn),發(fā)現(xiàn)順序表的尾部插入刪除數(shù)據(jù)效率很高,可是,在 頭部與隨機(jī)插入的場(chǎng)景下效率低下 而且 存在擴(kuò)容消耗 等一些問題。而有這樣一種數(shù)據(jù)結(jié)構(gòu)可以很好的解決順序表存

    2024年01月20日
    瀏覽(87)
  • 【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題)

    【數(shù)據(jù)結(jié)構(gòu)】反轉(zhuǎn)鏈表、鏈表的中間節(jié)點(diǎn)、鏈表的回文結(jié)構(gòu)(單鏈表OJ題)

    正如標(biāo)題所說,本文會(huì)圖文詳細(xì)解析三道單鏈表OJ題,分別為: ?反轉(zhuǎn)鏈表 (簡(jiǎn)單) ?鏈表的中間節(jié)點(diǎn) (簡(jiǎn)單) ?鏈表的回文結(jié)構(gòu) (較難) 把他們放在一起講的原因是: ?反轉(zhuǎn)鏈表 和 ?鏈表的中間節(jié)點(diǎn) 是 ?鏈表的回文結(jié)構(gòu) 的基礎(chǔ) 為什么這樣說?請(qǐng)往下看: 目錄 1. 反轉(zhuǎn)鏈

    2024年02月13日
    瀏覽(104)
  • 初階數(shù)據(jù)結(jié)構(gòu)(三)鏈表

    初階數(shù)據(jù)結(jié)構(gòu)(三)鏈表

    ??博主csdn個(gè)人主頁:小小unicorn?? ?專欄分類:c++ ??代碼倉(cāng)庫:小小unicorn的學(xué)習(xí)足跡?? ??????關(guān)注我?guī)銓W(xué)習(xí)編程知識(shí) 前面我們講的線性表的 順序存儲(chǔ)結(jié)構(gòu) 。它是有缺點(diǎn)的,最大的缺點(diǎn)就是插入和刪除時(shí)需要移動(dòng)大量元素,這顯然就需要 耗費(fèi)時(shí)間 ,那能不能想辦法

    2024年02月09日
    瀏覽(94)
  • 【數(shù)據(jù)結(jié)構(gòu)OJ題】環(huán)形鏈表II

    【數(shù)據(jù)結(jié)構(gòu)OJ題】環(huán)形鏈表II

    原題鏈接:https://leetcode.cn/problems/linked-list-cycle-ii/description/ 如果有小伙伴不了解環(huán)形鏈表,可以先看看這篇文章: https://blog.csdn.net/m0_62531913/article/details/132352203?spm=1001.2014.3001.5502 我們來看下圖: ?我們根據(jù)這個(gè)結(jié)論就可以做出這道題目了!

    2024年02月12日
    瀏覽(19)
  • 【數(shù)據(jù)結(jié)構(gòu)OJ題】移除鏈表元素

    【數(shù)據(jù)結(jié)構(gòu)OJ題】移除鏈表元素

    原題鏈接:力扣? 給你一個(gè)鏈表的頭節(jié)點(diǎn)? head ?和一個(gè)整數(shù)? val ?,請(qǐng)你刪除鏈表中所有滿足? Node.val == val ?的節(jié)點(diǎn),并返回 新的頭節(jié)點(diǎn) ?。 ?方法一:原地刪除節(jié)點(diǎn) 思路: ?首先,定義兩個(gè)指針:prve和cur。它們會(huì)在遍歷鏈表的過程中分別指向當(dāng)前節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)和當(dāng)前

    2024年02月11日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)】--oj_合并兩個(gè)有序鏈表(詳解)

    【數(shù)據(jù)結(jié)構(gòu)】--oj_合并兩個(gè)有序鏈表(詳解)

    目錄 方法一:無頭結(jié)點(diǎn)的方法? 方法二:有頭結(jié)點(diǎn)的方法 題述: 已給函數(shù)頭: struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) 已給出鏈表的結(jié)構(gòu)體定義: struct ListNode { ?? ?struct ListNode* next; ?? ?int val; }; 已知l1、l2分別指向兩個(gè)鏈表 要求: 將兩個(gè)升序鏈表合并為一

    2024年02月07日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包