【问题标题】:Inserting a node at a specific position in a Linked list在链表中的特定位置插入节点
【发布时间】:2017-03-07 05:17:06
【问题描述】:

给我一​​个指向链表头节点的指针,一个要添加到链表中的整数以及必须插入该整数的位置。 将此节点插入所需位置后,我需要返回头节点。

我编写的代码由于某种原因无法运行并进入无限循环。

  class Node {
     int data;
     Node next;
  }


Node InsertNth(Node head, int data, int position) {
    int count = 0;
    Node node = head;
    Node prev = null;
    while(count != position){
      count++;
      node = node.next;
      prev = node;
    }

    Node newNode = new Node();
    newNode.data = data;


    newNode.next = node;
    if(count == 0){
          head = newNode;
       }else{
          prev.next = newNode;
    }

    return head;          
}

【问题讨论】:

  • 提示:在while 循环结束后放置:System.out.println("node = " + node.data + " prev = " + prev.data); 实际上,您需要先确保nodeprev 不为空。但我认为如果你这样做,你将能够发现错误。

标签: java algorithm data-structures linked-list


【解决方案1】:
node = node.next;
prev = node;

这应该是相反的顺序

prev = node;
node = node.next;

而且代码在很多情况下也没有检查,例如指定的位置是否大于链表的大小。尝试重写代码,您能否提及您用于测试功能的值。 我认为prev=node 应该抛出异常,因为 prev 没有初始化

【讨论】:

    【解决方案2】:

    首先,我找到了位置。 然后通过更改指针在该位置插入新节点。

      Node InsertNth(Node head, int data, int position) {
    
        Node newNode= new Node();
        newNode.data=data;
    
        Node ptr = head;
        pos = pos - 1;
        for (int i = 1; ; i++) {
         if(ptr==null)
           {  break;
               }
            if (i == pos) {
                newNode.next=ptr.next;
                ptr.next=newNode;
                break;
            }
            ptr = ptr.next;
        }
    }
    

    【讨论】:

      【解决方案3】:
      public static Node InsertNth(Node head, int data, int position) {
      
                Node node = new Node(data);
                node.next = null;
                if (head == null && position == 0){
                    head = node;
                }
                else if(head != null && position == 0){
                    node.next = head;
                    head = node;
                }
                Node tempCurrentNode = head ;
                Node tempPreviousNode = null;
                int index = 0;
                while (index < position) {
                    tempPreviousNode =  tempCurrentNode;
                    tempCurrentNode = tempCurrentNode.next;
                    index = index + 1;
                }
                  node.next = tempCurrentNode;
                  tempPreviousNode.next = node;
      
               return head;
          }
      

      【讨论】:

        【解决方案4】:
        var head;
        
        class Node{
            constructor(val) {
                this.data=val;
                this.next=null;
            }
        }
        
        const sortedAdd = val => {
            new_node = new Node(val);
            var current
            if(head == null || head.data > new_node.data) {
                new_node.next = head;
                head = new_node;
            } else {
                current = head;
                while (current.next != null && current.next.data < new_node.data) {
                    current = current.next;
                }
                new_node.next = current.next;
                current.next = new_node;
        
            }
        }
        
        const add = val => {
            new_node = new Node(val);
            var current
            if(head == null) {
                head = new_node;
            } else {
                current = head;
                while (current.next != null ) {
                    current = current.next;
                }
                current.next = new_node;
        
            }
        }
        
        const insertAtPos= (val, insertIndex) => {
            new_node = new Node(val);
            var current, prev;
            if(head == null) {
                head = new_node;
            } else {
                current = head;
                let index=0;
                prev =current;
        
                while (index <= insertIndex) {
                    if(0 === insertIndex) {
                        new_node.next = current;
                        prev.next = new_node;
                        break;  
                    } else if(index === insertIndex) {
                        new_node.next = current;
                        prev.next = new_node;
                        break;
                    } 
                    
                    prev = current;
                    current = current.next;
                    index++;
                }
            }
        }
        const deleteNode = val =>{
            var current = head;
            var prev;
            while(current != null) {
                if(current.data === val) {
                    console.log('Deleted node ', current.data);
                    prev.next = current.next;
                }
                prev = current;
                current = current.next;
            }
        }
        const printList = () => {
            let temp = head;
            while(temp != null) {
                console.log(temp.data);
                temp = temp.next;
            }
        }
        
        [5, 10, 7, 3, 1, 9].map(d => add(d));
        console.log('Before');
        printList();
        console.log('After ');
        insertAtPos(4, 3);
        // deleteNode(3);
        printList();
        
        //output
        

        之前 5 10 7 3 1 9 后 5 10 7 4 3 1 9

        【讨论】:

          猜你喜欢
          • 2022-10-18
          • 2021-02-08
          • 1970-01-01
          • 2012-05-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-23
          • 2014-02-11
          相关资源
          最近更新 更多