算法2:在linked list中找倒数第N个结点
2017-03-01 12:44
169 查看
在linked list中找倒数第N个结点
解题思路:
设置一快一慢指针,快指针先走N步,然后快慢指针同时走,当快指针走到末尾时,慢指针对应的节点就是倒数第N个节点。LinkList.h添加函数
//获取链表的倒数第n个节点 Node* GetLastNNode(int n);
LinkList.cpp函数实现如下:
Node* LinkList::GetLastNNode(int n) { if(head == NULL) { cout<<"linklist is empty"; return NULL; } if(n <= 0 || n > length) { cout<<"n is invalid"<<" n = "<<n<<" length = "<<length<<endl; return NULL; } //p指针先走n步 Node* p = head; while(p != NULL && n--) { p = p->next; } Node* q = head; while(p!= NULL) { q = q->next; p = p->next; } return q; }
测试代码如下:
void test_suanfa_2(LinkList link) { int data; cout<<"pleast input last n to get a node"<<endl; cin>>data; Node* nNode = link.GetLastNNode(data); if(nNode != NULL) { cout<<"the last n data is "<< nNode->data<<endl; } cout<<"pleast input invlid last n to get a node"<<endl; cin>>data; nNode = link.GetLastNNode(data); if(nNode != NULL) { cout<<"the last n data is "<< nNode->data<<endl; } }
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【019-Remove Nth Node From End of List(移除单链表的倒数第N个节点)】
- LeetCode | Remove Nth Node From End of List(移除链表中倒数第n个结点)
- LeetCode 19. Remove Nth Node From End of List(删除单链表倒数第N个结点)
- leetcode:Remove Nth Node From End of List(删除链表倒数第n个节点)【面试算法题】
- 一道求单向链表倒数第N个结点的算法题。
- LeetCode 19. Remove Nth Node From End of List--删除链表的倒数第n个结点
- 删除链表的倒数第n个结点 Remove Nth Node From End of List
- 为博客园上一道面试题写的代码-一道求单向链表倒数第N个结点的算法题。
- Remove Nth Node From End of List 删除链表的倒数第n个结点
- 【算法】删除单链表的倒数第N个结点
- 9.链表中倒数第k个结点[FindReverseKthLinkedListNode]
- 【经典算法】: 求链表中倒数第K个结点
- 每天一个算法之链表中倒数第K个结点
- [算法][LeetCode]Linked List Cycle & Linked List Cycle II——单链表中的环
- <LeetCode> 题174:删除链表中倒数第n个结点
- Remove Nth Node From End of List 链表删除倒数第N个元素@LeetCode
- 008实现一个算法从一个单链表中返回倒数第n个元素(keep it up)
- LeetCode算法题目:Reverse Linked List II
- 删除链表中倒数第n个结点
- 【算法分析】如何理解快慢指针?判断linked list中是否有环、找到环的起始节点位置。以Leetcode 141. Linked List Cycle, 142. Linked List Cycle II 为例Python实现