您的位置:首页 > 职场人生

剑指offer--面试题16:翻转链表--Java实现

2015-06-15 21:36 549 查看
题目描述:

定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。

解题思路:

为了反转列表,其实就是为了改变next指针,由指向后一个变为指向前一个。

这里为了避免链表断裂,要保存三个结点,即当前结点,前一个结点和后一个结点。

代码:

public class ReverseListTest {

static class ListNode {
int key;
ListNode next;

}

public static ListNode reverse(ListNode pHead) {
ListNode reverseHead = pHead;
ListNode node = pHead;
ListNode prevNode = null;

while (node != null) {
ListNode next = node.next;
if (next == null) {
reverseHead = node;

}
node.next = prevNode;
prevNode = node;
node = next;
}

return reverseHead;

}

public static void main(String[] args) {

// 建立一个测试链表
ListNode head = new ListNode();
head.key = 0;
ListNode p = head;
for (int i = 1; i < 10; i++) {
ListNode node = new ListNode();
node.key = i;
node.next = null;
p.next = node;
p = node;
}
ListNode pNode = reverse(head);

while(pNode != null){
System.out.println(pNode.key);
pNode = pNode.next;
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: