链表-常见题

Posted hzk-note

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表-常见题相关的知识,希望对你有一定的参考价值。

struct  Node
{
    int _data;
    Node *_next;
};

逆序:

1)修改指向:效率较低

 1 Node* reverseList(Node *head) {
 2     if (head == 0) return head;
 3     Node *p = head->_next;
 4     if (p == 0) return head;
 5     Node *q = head, *tmp;
 6     while (p) {
 7         tmp = p->_next;
 8         p->_next = q;
 9         q = p;
10         p = tmp;
11     }
12     head->_next = 0;
13     return q;
14 }

2)栈存储值,然后修改节点值

 1 Node* reverseList2(Node *head) {
 2     if (head == 0) return head;
 3     Node *p = head;
 4     stack<int> s;
 5     while (p) {
 6         s.push(p->_data);
 7         p = p->_next;
 8     }
 9     p = head;
10     while (!s.empty()) {
11         p->_data = s.top();
12         p = p->_next;
13         s.pop();
14     }
15     return head;
16 }

 

判断链表是否有环:快慢指针

 1 bool hasCycle(ListNode *head) {
 2     if (head == nullptr) return false;
 3 
 4     ListNode *fast, *slow;
 5     fast = slow = head;
 6 
 7     do {
 8         fast = fast->_next;
 9         if (fast == nullptr) return false;
10         fast = fast->_next;
11 
12         slow = slow->_next;
13 
14     } while (fast && fast != slow);
15 
16     if (fast == nullptr) return false;
17     return true;
18 }

 

约瑟夫问题:省略

以上是关于链表-常见题的主要内容,如果未能解决你的问题,请参考以下文章

链表常见的题型(java实现)

链表-常见题

一文通数据结构与算法之——链表+常见题型与解题策略+Leetcode经典题

JavaScript笔试题(js高级代码片段)

刷题整理面试常见算法题集合

数据结构 | 如何一文搞定链表问题?(附20本书获奖名单)