单链表反链,分别用c++和java,python 实现了一下
public class LinkedList {
/**
* @param args
*/
public static void main(String[] args) {
LinkedList tl=new LinkedList();
tl.testReverse();
}
void testReverse(){
// TODO Auto-generated method stub
NodeList[] nodelist={new NodeList(),new NodeList(),new NodeList(),new NodeList()};
for(int i=0;i<nodelist.length;i++){
nodelist[i].data=i+1;
if(i==nodelist.length-1){
nodelist[i].next=null;
}else{
nodelist[i].next=nodelist[i+1];
}
}
printNodeListValue(nodelist[0]);
NodeList printNodelist=reverse(nodelist[0]);
printNodeListValue(printNodelist);
}
void printNodeListValue(NodeList nodelist){
do{
System.out.println(nodelist.data);
nodelist=nodelist.next;
}while(nodelist!=null);
System.out.println("-------------");
}
NodeList reverse(NodeList nodelist){
NodeList preNode=null;
while(nodelist!=null){
NodeList nextNode=nodelist.next;
nodelist.next=preNode;
preNode=nodelist;
nodelist=nextNode;
}
return preNode;
}
}
class NodeList
{
int data;
NodeList next;
}
#########################################################################
'''
Created on 2013-7-4
@author: wengfei
'''
class NodeList():
pass
class PrintData():
def initData(self,dataLen):
nodeLists=[]
for i in range(0,dataLen):
nodeList=NodeList()
nodeList.data=i
nodeList.next=None
nodeLists.append(nodeList)
#print len(nodeLists)
for j in range(0,dataLen):
if j<len(nodeLists)-1:
nodeLists[j].next=nodeLists[j+1]
return nodeLists
def printNodeList(self,nodelist):
while nodelist!=None:
print (nodelist.data)
nodelist=nodelist.next
print ("--------------")
def reverseNodeList(self,nodeList):
preNodeList=None
while nodeList!=None:
nextNodelist=nodeList.next
nodeList.next=preNodeList
preNodeList=nodeList
nodeList=nextNodelist
return preNodeList
if __name__ == "__main__":
printData=PrintData()
nodelists=printData.initData(10);
printData.printNodeList(nodelists[0])
nodeList=printData.reverseNodeList(nodelists[0])
printData.printNodeList(nodeList)
#######################################################################
// c++Solutions.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<iostream>
using namespace std;
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
ListNode* ReverseIteratively(ListNode* pHead)
{
ListNode* pReversedHead = NULL;
ListNode* pNode = pHead;
ListNode* pPrev = NULL;
while(pNode != NULL)
{
// get the next node, and save it at pNext
ListNode* pNext = pNode->m_pNext;
// if the next node is null, the currect is the end of original
// list, and it's the head of the reversed list
if(pNext == NULL)
pReversedHead = pNode;
// reverse the linkage between nodes
pNode->m_pNext = pPrev;
// move forward on the the list
pPrev = pNode;
pNode = pNext;
}
return pReversedHead;
}
int _tmain(int argc, _TCHAR* argv[])
{
struct ListNode LN[5];
int a[5]= {1, 2, 3, 4, 5};
int i = 0;
for(i = 0; i <5; i++)
{
LN[i].m_nKey= a[i];
if(i <4)
LN[i].m_pNext = &LN[i+1];
else
LN[i].m_pNext = NULL;
cout <<LN[i].m_nKey<<endl;
}
ListNode* resultListNode;
resultListNode=ReverseIteratively(LN);
while(resultListNode!=NULL)
{
cout<<resultListNode->m_nKey<<endl;
resultListNode=resultListNode->m_pNext;
}
cin>>i;
return 0;
}