顺序表链表OJ题

本文介绍了多个关于链表的编程题目,包括寻找倒数第k个节点、合并两个有序链表、判断回文链表、查找两个链表的公共节点、检测链表环以及链表排序和去重等。提供了C++和C语言的解题思路及方法,重点在于链表的高效操作和算法设计。
摘要由CSDN通过智能技术生成

1、输入一个链表,输出该链表中倒数第k个结点
c++

class Solution
{
   
public:
	ListNode * FindKthToTail(ListNode * pListHead, unsigned int k)
	{
   
		if (!pListHead || k <= 0) return nullptr;
		int n = 0;
		ListNode * cur  = pListHead;
		while (cur)
		{
   
			cur = cur->next;
			++n;
		}
		if (n < k) return nullptr;
		n -= k;
		while (n--)
		{
   
			pListHead = pListHead->next;
		}
		return pListHead;
	}
};

求链表倒数第k个值,即求正数n-k个值。

2、将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的
c++

class Solution
{
   
public:
	ListNode * mergeTwoLists(ListNode * 11, ListNode * 12)
	{
   
		if (11 == nullptr)
		{
   
			return 12;
		}
		else if (12 == nullptr)
		{
   
			return 11;
		}
		else if (11->val < 12->val)
		{
   
			11->next = mergeTwoLists(11->next, 12);
			return 11;
		}
		else
		{
   
			12->next = mergeTwoLists(11, 12->next);
			return 12;
		}
	}
};

两个链表头部值较小的一个节点与剩下元素的 merge 操作结果合并。
3、对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。
c++

class PalindromeList {
   
public:
	bool chkPalindrome(ListNode* A) {
   
		if (A == NULL || A->next == NULL)
			return true;
		ListNode* slow, *fast, *prev, *cur, *nxt;
		slow = fast = A;
		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值