温江建网站申请百度收录网址
题目:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
分析:
反转后链表的头节点即为原链表的尾结点(m_pNext为null的节点)。
反转的过程中,要定义三个指针,分别指向当前遍历到的节点index,它的前一个节点i以及后一个节点j。因为当在反转时,如果将当前节点的下一个节点指向其前一个节点i,那么就要知道其前一个节点。如果不事先保存其后一个节点,那么当前节点的下一个节点为前一个节点时index.next=i,要进行接下来的反转时,就找不到i原来的下一个节点了,所以要事先把j保存。
代码:
public static class ListNode{int m_nKey;ListNode m_pNext;ListNode(int m_nKey){this.m_nKey=m_nKey;}}public static ListNode ReverseList(ListNode pHead){ListNode pReversedHead=null;ListNode pNode=pHead;ListNode pPrev=null;while(pNode!=null){ListNode pNext=pNode.m_pNext;if(pNext==null){pReversedHead=pNode;}pNode.m_pNext=pPrev;pPrev=pNode;pNode=pNext;}return pReversedHead;}public static void main(String[] args) {ListNode node1=new ListNode(1);ListNode node2=new ListNode(2);ListNode node3=new ListNode(3);ListNode node4=new ListNode(4);node1.m_pNext=node2;node2.m_pNext=node3;node3.m_pNext=node4;ListNode reversedHead = ReverseList(node1);while (reversedHead!=null){System.out.print(reversedHead.m_nKey+" ");reversedHead=reversedHead.m_pNext;}}