
链表
文章平均质量分 50
Sunny君
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个结点。例如一个链表有6个结点,从头结点开始它们的值依次是1,2,3,4,5,6。这个链表倒数第3个结点是值为4的结点 分析:如果链表有n个结点,倒数第k个结点,就是第n-k+1个结点。 最直接的办法就是直接遍历链表,第一次统计出链表中结点的个数n,第二次找到链表的第n-k+1个结点,便是倒数第k结点。这样的解法需要遍历链表两次。 遍历链表一次的解法:原创 2018-01-05 10:13:13 · 134 阅读 · 0 评论 -
反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。 分析: 使用三个指针,一个指向当前遍历的结点,一个指向前一个结点,一个指向后一个结点。从头结点开始遍历,指向前一个结点的指针初始化为空,首先初始化这三个指针。pNode=pListHead,pPrev=NULL,pNext=pNode->m_pNext。反转链表,pNode->Next=pPrev。向后移动链表,p原创 2018-01-05 11:38:06 · 195 阅读 · 0 评论 -
合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使得新链表中的结点仍然按照递增排序的 分析: 假设链表1:1->3->5->7链表2:2->4->6->8合并之后的链表应该是1->2->3->4->5->6->7->8 我们首先比较链表1和链表2的头结点的值的大小,值小的结点1作为新链表的头结点,此时链表1:3->5->7,链表2:2->4->6->8。再比较此时两个链表的头结点,值小的结点2原创 2018-01-05 15:11:25 · 153 阅读 · 0 评论 -
两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点 分析: 思路1:碰到这道题,很多人的第一反应就是蛮力法:在第一链表上顺序遍历每个结点,每遍历到一个结点的时候,在第二个链表上顺序遍历每个结点。如果在第二个链表上有一个结点和第一个链表上的结点一样,说明两个链表在这个结点上重合,于是就找到了它们的公共结点。如果第一个链表的长度为m,第二个链表的长度为n,显然该方法的时间复杂度是O(mn)。 思路2:原创 2018-01-16 23:16:36 · 229 阅读 · 0 评论 -
复杂链表的复制
题目:请实现函数ComplexListNode* Clone(ComplexListNoed* pHead),复制一个复杂链表。在复杂链表中,每一个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL,结点的C++定义如下: struct ComplexListNode { int m_nValue; ComplexListNode*原创 2018-01-09 15:30:13 · 146 阅读 · 0 评论 -
反转链表,递归/非递归实现
Struct ListNode { int data; ListNode* next; } //递归实现 ListNode * ReverseList(ListNode * head) { //如果链表为空或者链表中只有一个元素 if(head==NULL || head->next==NULL) return head; else { ListNode* newHead=Re原创 2018-01-26 21:55:41 · 192 阅读 · 0 评论