剑指offer系列13---反转链表并输出头结点

【题目】输入一个链表,反转链表后,输出链表的所有元素。

【思路】将当前指针指向前者即为反转,反转是同时反转指针和赋值操作。即将指针指向前者并给前者赋值。反转后的头结点就是原链表的尾 结点。代码如下:

 1 package com.exe3.offer;
 2 /**
 3  * 13【题目】输入一个链表,反转链表后,输出链表的所有元素。
 4  * @author WGS
 5  *
 6  */
 7 public class ReverseLinkList {
 8     public static class LinkNode{
 9         int val;
10         LinkNode next=null;
11         public LinkNode(int n){
12             this.val=n;
13         }
14     }
15
16     public LinkNode getReverseLink(LinkNode headnode){
17         LinkNode preNode=null;//当前结点的前一个结点
18         LinkNode curNode=headnode;//当前结点
19         LinkNode reverseHeadNode=null;//反转后的头结点,即原链表的尾结点。
20
21         while(curNode!=null){
22             LinkNode nextNode=curNode.next;
23             if(nextNode==null)
24                 reverseHeadNode=curNode;
25             //反转是将指针指向前者,值也同时赋给前者
26             curNode.next=preNode;//指针反向
27             preNode=curNode;//同时赋值
28             curNode=nextNode;
29
30         }
31         return reverseHeadNode;
32     }
33
34     public static void main(String[] args){
35         ReverseLinkList r=new ReverseLinkList();
36         LinkNode node1=new LinkNode(1);
37         LinkNode node2=new LinkNode(2);
38         LinkNode node3=new LinkNode(3);
39         LinkNode node4=new LinkNode(4);
40         LinkNode node5=new LinkNode(5);
41         node1.next=node2;
42         node2.next=node3;
43         node3.next=node4;
44         node4.next=node5;
45         LinkNode node=r.getReverseLink(node1);
46         System.out.println("头结点是"+node.val);
47         while(node!=null){
48             System.out.println(node.val);
49             node=node.next;
50         }
51     }
52
53
54 }
时间: 2024-10-25 00:12:35

剑指offer系列13---反转链表并输出头结点的相关文章

剑指offer六:反转链表

输入一个链表,反转链表后,输出链表的所有元素 public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class Solution { public ListNode ReverseList(ListNode head) { ListNode pre = null; ListNode next = null; while(head != null){

剑指offer【13】- 链表中倒数第k个结点

输入一个链表,输出该链表中倒数第k个结点. 1 /* 2 public class ListNode { 3 int val; 4 ListNode next = null; 5 6 ListNode(int val) { 7 this.val = val; 8 } 9 }*/ 10 public class Solution { 11 public ListNode FindKthToTail(ListNode head,int k) { 12 13 if(head == null){ 14

剑指offer系列12---链表倒数第k个结点

[题目]输入一个链表,输出该链表中倒数第k个结点. [思路]方法3:设置两个指针,第一个指针先走k-1步,第2个指针开始走,(这时候第一个指针指向第k个)当第一个指针走到尾部时(即走了k步),第一个指针即指向第k个结点.(推荐的方法) 方法2:先获取结点个数,再顺数第n-k+1个结点 1 2 3 4 5 6 方法1:先获取长度,再复制至数组一中,再反序加至数组2中,这时候要输出倒数第K个数即为数组2中的顺数第k-1个数.此处出现的异常不知道该怎么处理.(我的方法) 1 package com.e

剑指offer 56.删除有序链表中的重复结点

56. 删除有序链表中的重复结点 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 分析 借助辅助头结点,可避免单独讨论头结点的情况.设置两个结点 pre 和 cur,当 cur 和 cur.next 值相等,cur 一直向前走,直到不等退出循环,这时候 cur 指的值还是重复值,调整 cur 和 pre 的指针再次判断 /*

《剑指offer》:[57]删除链表中重复的结点

题目:在一个排序的链表中,如何删除重复的结点? 例如,在图a中重复结点被删除之后,链表如图b所示. 方案:这个题应该说是比较简单的,不在赘述,主要利用三个指针,就可以解决这个问题. 具体实现代码: #include <iostream> using namespace std; struct ListNode { int data; ListNode *next; }; ListNode *pHead=NULL; ListNode *pEnd=NULL; void CreateList() {

剑指offer系列62---两个链表的公共结点

[题目]输入两个链表,找出它们的第一个公共结点. * [思路]1 获取两链表的长度: * 2 让长的链表先走n步后此时走到短链表起始位置: * 3 两链表同时遍历,直至相同,这时返回第一个公共结点. 1 package com.exe11.offer; 2 3 /** 4 * [题目]输入两个链表,找出它们的第一个公共结点. 5 * [思路]1 获取两链表的长度: 6 * 2 让长的链表先走n步后此时走到短链表起始位置: 7 * 3 两链表同时遍历,直至相同,这时返回第一个公共结点. 8 * @

剑指offer系列——25.复杂链表的复制

Q:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) T: A:代码: RandomListNode* Clone(RandomListNode* pHead) { if(!pHead) return NULL; RandomListNode *cur = pHead; while(cur){ RandomListNode *nod

剑指offer python版 反转链表

class ListNode(object): def __init__(self,x): self.val=x self.next=None class Link(object): def __init__(self,values=None): self.nodes=self.set_link(values) if values else None def get_link(self): return self.nodes def set_link(self,values): if not v

剑指offer python版 删除链表中重复的结点

class ListNode(object): def __init__(self,x): self.val=x self.next=None class Link(object): def __init__(self,values=None): self.nodes=self.set_link(values) if values else None def get_link(self): return self.nodes def set_link(self,values): if not v