算法(15)翻转链表
2018-11-08 本文已影响8人
猪_队友
题目描述
输入一个链表,反转链表后,输出新链表的表头。
思路:
就是把原节点的next节点当做头结点,然后将头结点的next指向原节点,其实就是互换一下,依次进行,知道把最后一个节点转换成了头结点。
新建一个空节点,命名为preNode,然后将pNode节点(原节点)的next节点指向这个前节点,然后将我们自身的地址给这个前节点,我们自身节点往后移动,原来的pNode.next 地址指向了pNode,这就是将原来的pNode和pNextNode变成了现在的preNode和pNode,其实双方已经换位,就连指向也完全相反了。
学习过C的同学更能理解这个,结合图片,应该就不难理解了。
public ListNode ReverseList(ListNode head) {
if (head == null)
return null;
ListNode newHead = null;
ListNode preNode = null;
ListNode pNode = head;
while ((pNode != null)) {
ListNode pNextNode = pNode.next;
if (pNextNode == null) {
newHead = pNode;
}
pNode.next = preNode;
preNode = pNode;
pNode = pNextNode;
}
return newHead;
}