第 2 天 链表(简单)

78 阅读1分钟

剑指 Offer 06. 从尾到头打印链表

思路: 先遍历一遍列表,存放元素到数组里,再反转数组

class Solution {
public:
    vector<int> reversePrint(ListNode* head) {
        ListNode *p=head;
        vector<int> v;
        while(p){
            v.push_back(p->val);
            p=p->next;
        }
        reverse(v.begin(),v.end());
        return v;
    }
};
class Solution {
    public int[] reversePrint(ListNode head) {
        ArrayList<Integer> list=new ArrayList<Integer>();
        ListNode p=head;
        while(p!=null){
            list.add(p.val);
            p=p.next;
        }
        Collections.reverse(list);
        int[] arr=new int[list.size()];
        int j=0;
        for(Integer i:list) arr[j++]=i;
        return arr;
    }
}

剑指 Offer 24. 反转链表

class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode *q=0;
        ListNode *p=head;
        while (p) {
            ListNode* nxt = p->next;
            p->next = q;
            q = p;
            p = nxt;
        }
        return q;
    }
};
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode p=head,q=null;
        while(p!=null){
            ListNode next=p.next;
            p.next=q;
            q=p;
            p=next;
        }
        return q;
    }
}

剑指 Offer 35. 复杂链表的复制

思路: 先遍历一遍链表,把所有的节点都拷贝一份,存在map里去,map的key是被拷贝的节点,map的value是拷贝后的复制后的节点

然后再遍历一遍链表,这时就可以通过map来找到值了

class Solution {
public:
    unordered_map<Node *,Node *> mp;
    Node* copyRandomList(Node* head) {
      Node *p=head;
      while(p){
          mp[p]=new Node(p->val);
          p=p->next;
      }
     Node h(-1);
     p=head;
     auto q=&h;
     while(p){
         q->next=mp[p];
         q=q->next;
         q->random=mp[p->random];
         p=p->next;
     }
        return h.next;
    }
};
class Solution {
    HashMap<Node,Node> map=new HashMap<>();
    public Node copyRandomList(Node head) {
        Node p=head;
        while(p!=null){
            map.put(p,new Node(p.val));
            p=p.next;
        }
        Node h=new Node(0);
        Node q=h;
        p=head;
        while(p!=null){
            q.next=map.get(p);
            q=q.next;
            q.random=map.get(p.random);
            p=p.next;
        }

        return h.next;
    }
}