链表操作之翻转链表以及求倒数第K个节点

来源:互联网 发布:java 日期相差天数 编辑:程序博客网 时间:2024/06/10 03:25

翻转链表没什么说的,就是注意保存上一个节点和下一个节点的信息。

public  Node reverseList(Node head){        Node pReversedHead=null;        Node pNode=head;        Node pPrev=null;        while(pNode!=null){            Node pNext=pNode.next;            if(pNext==null)                //特别注意链表中要考虑下一个是否为空                pReversedHead=pNode;            pNode.next=pPrev;            pPrev=pNode;            pNode=pNext;        }        return pReversedHead;    }

求倒数的K个节点,先设置一个指针走到第K-1的位置,再设置一个指针从头开始,然后两个指针一起走,最后就是倒数第K个指针啦。

public Node reGetKthNode(Node head,int k){        if(head==null||k==0)            return null;        Node pBegind=null;        Node paHead=head;        for(int i=0;i<k-1;i++){               //循环到头结点以后的第K个节点            if(paHead!=null)                paHead=paHead.next;            else                return null;        }        pBegind=head;        while(paHead!=null){            paHead=paHead.next;            pBegind=pBegind.next;        }        return pBegind;    }

合并两个有序的链表

    public Node mergeSortedListRec(Node head1,Node head2){        if(head1==null)return head2;        if(head2==null)return head1;        if(head1.value>head2.value){            head2.next=mergeSortedListRec(head2.next,head1);            return head2;        }        else{            head1.next=mergeSortedListRec(head1.next,head2);            return head1;        }
0 0