链表
文章平均质量分 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 · 100 阅读 · 0 评论 -
反转链表
题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。分析:使用三个指针,一个指向当前遍历的结点,一个指向前一个结点,一个指向后一个结点。从头结点开始遍历,指向前一个结点的指针初始化为空,首先初始化这三个指针。pNode=pListHead,pPrev=NULL,pNext=pNode->m_pNext。反转链表,pNode->Next=pPrev。向后移动链表,p原创 2018-01-05 11:38:06 · 139 阅读 · 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 · 106 阅读 · 0 评论 -
两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点分析:思路1:碰到这道题,很多人的第一反应就是蛮力法:在第一链表上顺序遍历每个结点,每遍历到一个结点的时候,在第二个链表上顺序遍历每个结点。如果在第二个链表上有一个结点和第一个链表上的结点一样,说明两个链表在这个结点上重合,于是就找到了它们的公共结点。如果第一个链表的长度为m,第二个链表的长度为n,显然该方法的时间复杂度是O(mn)。思路2:原创 2018-01-16 23:16:36 · 187 阅读 · 0 评论 -
复杂链表的复制
题目:请实现函数ComplexListNode* Clone(ComplexListNoed* pHead),复制一个复杂链表。在复杂链表中,每一个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL,结点的C++定义如下:struct ComplexListNode{ int m_nValue; ComplexListNode*原创 2018-01-09 15:30:13 · 113 阅读 · 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 · 131 阅读 · 0 评论